1. 程式人生 > >c語言的巨集定義缺陷

c語言的巨集定義缺陷

|      考慮asert巨集的定義。
|      定義1:#define assert(e) if(!e) _assert_error (__FILE__, __LINE__ )
|                  當 if(x>0 && y>0)    assert(x>y);
|                      else                   assert(y>x);
|                 巨集會被展開為:if(x>0 && y>0)     if(!x>y) _assert_error ("foo.c", 37 );
|                                        else                   if(!y>x) _assert_error ("foo.c", 39 );
|                 從而形成 else if結構,與期待的結果不一致
|      定義2:#define assert(e) {if(!e) _assert_error (__FILE__, __LINE__ );}