作者wlsabcd (我不会C++)
看板Programming
标题Re: [问题] 请问BCB在有form的情况下
时间Fri Apr 6 08:02:28 2007
: #ifdef _DEBUG
/* ... 省略 ... */
: #else
: static void __dbg_printf (const char * format,...) {}
: #define DBG 1?((void)(NULL)):__dbg_printf
: #endif
: 看得出来它让 _DEBUG 没定义时,程式中呼叫的 DBG 就完全不做任何事
: 可是为什麽还要特地写成一个 conditional expression,而且还是绝对成立的
: 这样有什麽特别用意吗?
: (毕竟此时直接呼叫空白定义版的 __dbg_printf 就已经达到不做事的目的了)
#define DBG 1?((void)(NULL)):__dbg_printf
这一行是为了配合文法的正确,防止编译错误发生。
试想DBG的用法,Ex:
GDB("this is debug string %c\n", 'A');
套入GDB的定义变成:
1?((void)(NULL)):__dbg_printf("this is debug string %c\n", 'A');
以更明白的叙述:
if (1)
{
(void)(NULL);
}
else
{
__dbg_printf("this is debug string %c\n", 'A');
}
这在文法上是成立的。
若GDB的定义改为:
#define DBG ((void)(NULL))
以上例,则变成:
((void)(NULL))("this is debug string %c\n", 'A'); /* 错误叙述 */
implement空的Debug function方法有好几种,这是其中一种。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 203.73.175.134