宏定义的一个易于错误的地方在于if语句,在宏定义中有if语句,易于和程序代码中的else语句搭配混乱导致错误。
例如,
#define assert(e) if (!e) assert_error(_FILE_,_LINE)
if(x>0&&y>0)
assert(x>y);
else
assert(y>x);
以上写法将宏定义带入后展开,会发现如下,
if(x>0&&t>0)
if(!(x>y))
assert_error(_FILE_,_LINE);
else
if(!(y>x))
assert_error(_FILE_,_LINE);
可见else的对应关系并非我们预期所料。