宏定義不是語句(2)

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章