我碰到这个预处理定义出来,而阅读Windows Research Kernel (WRK) 1.2的源代码:“#define assert(exp)((void)0)”是做什么的?
#define assert(exp) ((void) 0)
这是什么代码呢?为什么定义?
我碰到这个预处理定义出来,而阅读Windows Research Kernel (WRK) 1.2的源代码:“#define assert(exp)((void)0)”是做什么的?
#define assert(exp) ((void) 0)
这是什么代码呢?为什么定义?
它定义表达式assert(任何东西)什么都不做。
假设所用的环境不支持ANSI C assert语句,或者程序员不知道可以通过定义NDEBUG来禁用它。
要什么bdonlan说扩展,宏不会扩展为空的原因是因为如果它这样做,则是这样的:
assert(something) // oops, missed the semi-colon
assert(another_thing);
将编制发布模式而不是在调试模式。这是因为它是((void) 0)
而不是仅仅0
是为了防止“无效的声明”警告(或任何MSVC调用它们)。
只是好奇 - 什么是WRK 1.2? – 2009-05-20 03:36:18
我的猜测:Windows Research Kernel 1.2 – 2009-05-20 03:52:20