Assertions in Kaldi
断言最好用宏 KALDI_ASSERT 来完成。这比通常的 assert() 会给出更多信息;KALDI_ASSERT 打印出堆栈信息,同时也更容易配置。
一个断言的例子是:
KALDI_ASSERT(i < M.NumRows());
一个获得 assert-failure 更多信息的技巧是在断言语句后加上“&&[some string]”,例如
KALDI_ASSERT(ApproxEqual(delta, objf_change) && "Probable coding error in optimization");
正常编译时断言都会被检查,除非你定义了 NDEBUG。对占用大量CPU的内环断言,我们用下面的模式:
ifdef KALDI_PARANOID KALDI_ASSERT(i>=0); #endif
在当前的设定中,宏 KALDI_PARANOID 默认是定义了的。