C++ 理解宏有困难

C++ 理解宏有困难,c++,algorithm,macros,assert,C++,Algorithm,Macros,Assert,我最近发现了这段代码,我有点困惑 #ifdef LOCAL // chk -> fake assert #define dbg(...) cerr << "Line(" << __LINE__ << ") -> [" << #__VA_ARGS__ << "]: [", DBG(__VA_ARGS__) #define chk(...) if (!

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

#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
#ifdef LOCAL//chk->false assert
#define dbg(…)cerrdbg在任何情况下都会将消息与宏参数一起打印到
cerr
,而不管参数的计算结果是
true
还是
false


另一方面,chk宏仅在宏参数求值为false时打印消息,然后调用
exit

如果您理解
dbg
,那么
chk
不可理解的原因是什么?有一件事——如果您使用它,它会杀死您的应用程序。您是否尝试:
chk(false)
chk(真)
dbg(“你好”)应该是非常不言自明的。