提问者:小点点

难以理解断言宏


我最近发现了这段代码,我有点困惑。

#ifdef LOCAL //  chk -> fake assert
    #define dbg(...) cerr << "Line(" << __LINE__ << ") -> [" << #__VA_ARGS__ << "]: [", DBG(__VA_ARGS__)
    #define chk(...) if (!(__VA_ARGS__)) cerr << "Line(" << __LINE__ << ") -> function(" \
         << __FUNCTION__  << ") -> CHK FAILED: (" << #__VA_ARGS__ << ")" << "\n", exit(0);
#else
    #define dbg(...) 0
    #define chk(...) 0
#endif

我清楚地了解调试的作用,但我不知道“chk”的作用以及如何在代码中使用它。 谢谢


共2个答案

匿名用户

在任何情况下,dbg都将消息与宏参数一起打印到cerr,而不管参数的计算结果是true还是false

另一方面,chk macro仅在宏参数的计算结果为false时才打印消息,然后调用exit

匿名用户

它遍历chk的每个参数并检查它是否为false。 如果是,它将打印哪行以及在哪行函数中调用chk。

用法:

int main() {
    chk(false,1==2,'c'=='c');
}

将打印两次(对于第一个和第二个参数)。