我在C ++中有以下宏
#define AppLogExceptionIf(condition, ...) ((void) 0)
我想知道condition
是否会被执行?我是否认为扩张等同于
false;
语句,无论condition
如何,例如:
AppLogExceptionIf(0 == (x = 5), "Big problem!");
不会分配给x
?
答案 0 :(得分:3)
不,condition
将不会被评估。只要AppLogExceptionIf
出现括号,并且在编译器有机会查看代码之前,其后的至少一个参数将在文本上替换为((void) 0)
,并且绝对不做任何事情,就像您表示的那样。
答案 1 :(得分:3)
宏以文本方式替换,因此condition
在预处理器处理完之后甚至不会出现在源代码中。