关于#if的问题,请高手看一下
在书上看到了这么一句,
#if DBG
KdPrint(a) DbgPrint##a
#else
KdPrint(a)
#endif
说是有DbgPrint()这么个函数,然后为了只在调试版本输出,可以这样定义个宏,小弟不明白其中的机理,请高手给小弟指点迷津。
[解决办法]
#define DBG 1
就可以输出调试信息了
[解决办法]
##是连接符
应该是KdPrint(a) DbgPrint##a()这样吧?不然不是个函数
如果你这么调用KdPrint(1) 并且#define DBG 1
相当于调用DbgPrint1()
[解决办法]
#if DBG
定义KdPrint(a)为DbgPrint##a
#else
定义KdPrint(a)为空
#endif
这样当DBG定以后,在编译期间KdPrint(a)未被替换成DbgPrint##a再编译;如果没有定义DBG,则编译器会过滤掉KdPrint(a),不将其生成二进制文件,于是就不会执行。