(a) : (b))
上述宏定义了一个 MAX 宏,用以返回两个宏参数中较大的参数,这里需要注意一下,如果你使用带有副作用的宏参数,上面的 MAX 宏会返回意外的结果(因为宏并不是函数,宏本身只是做了代码的替换...我们也可以定义多行宏,方法就是在每一行的宏定义之后添加 \ 符号(最后一行不用添加 \ 符号):
#define MULTI_LINE_MACRO do {\
++i; \
} while(false)...) \
{ \
return; \
}
上面代码中我定义了两个宏(MACRO_1 和 MACRO_2),代码上看两者似乎是一致的,但是执行编译的话, MACRO_2 却会在最后一行出现错误(MACRO..._1 则没有编译错误):
语法错误:“}”
问题出在哪呢?...这导致 MACRO_2 宏不能被编译器正确解析,遂尔造成了上面的编译报错…
看来又是一个宏使用中的陷阱(pitfall),在此简单一记~