Chinaunix首页 | 论坛 | 博客
  • 博客访问: 140379
  • 博文数量: 37
  • 博客积分: 2671
  • 博客等级: 少校
  • 技术积分: 335
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-11 13:18
文章分类

全部博文(37)

文章存档

2011年(16)

2010年(21)

我的朋友

分类: C/C++

2010-10-14 16:45:21


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) |
给主人留下些什么吧!~~

chinaunix网友2010-10-14 21:06:21

i support u~bb,mm