给定#define'ition((void)0)是否执行宏的参数?

时间:2012-02-14 00:45:49

标签: c++ macros

我在C ++中有以下宏

#define AppLogExceptionIf(condition, ...) ((void) 0)

我想知道condition是否会被执行?我是否认为扩张等同于

false;

语句,无论condition如何,例如:

AppLogExceptionIf(0 == (x = 5), "Big problem!");

不会分配给x

2 个答案:

答案 0 :(得分:3)

不,condition将不会被评估。只要AppLogExceptionIf出现括号,并且在编译器有机会查看代码之前,其后的至少一个参数将在文本上替换为((void) 0),并且绝对不做任何事情,就像您表示的那样。

答案 1 :(得分:3)

宏以文本方式替换,因此condition在预处理器处理完之后甚至不会出现在源代码中。