C语法分析 (一)
<一>. do {} while(0)的作用
用这个不会导致性能降低,反而更有效.
a. 分号问题. 用{} 包含多语句与用do {} while(0)的区别所在:
#define foo() { x = 1; y = x; }
if ( true ) foo(); else dosomethingelse();
|
编译报错,parse error before else. 因为foo展开后,该行出现2个分号。
b. if语句问题,会匹配最近的else. 比如
#define ABC(x) if (x) dosomething() if ( true ) { ABC(x); } else { dosomethingelse(); }
|
宏定义展开后,else则与展开后的if语句匹配。
c. 空的宏定义避免warning. #define foo() do {} while(0).
什么都不做,但是避免某些编译器发出警告信息.
d. 存在一个独立的block,可以进行多语句实现,定义变量等.
#define foo() do1(); \ do2();
if (x) foo();
|
这样展开后 do2()不会与do1()被同时执行. 这个的话用{}与do {} while(0)都可以.
阅读(737) | 评论(1) | 转发(0) |