宏定義的一個易於錯誤的地方在於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的對應關係並非我們預期所料。