Chinaunix首页 | 论坛 | 博客
  • 博客访问: 838447
  • 博文数量: 90
  • 博客积分: 766
  • 博客等级: 军士长
  • 技术积分: 1867
  • 用 户 组: 普通用户
  • 注册时间: 2011-12-18 08:42
个人简介

linux

文章分类

全部博文(90)

文章存档

2021年(2)

2020年(2)

2017年(1)

2015年(11)

2014年(1)

2013年(53)

2012年(16)

2011年(4)

分类: C/C++

2012-02-17 08:58:06

试看以下宏:
#define ADD_A_B(a,b) a+=1; \
                     b+=1;
int i,j;
i = j =0;
while (j<10)
   ADD_A_B
 
这样貌似没什么错,但展开之后会发现这是一个bug,愿意是b到10的时候就退出循环,但展开之后却是:
while(j<10)
  i += 1;
j += 1;
b的值在从未发生改变,所以程序就死在这里了。加上do{}while(0)
 
#define ADD_A_B(a,b) do { a += 1; \
                          b += 1; \
                      } while(0)
展开之后就成了
while (j<10)
   do {
      i += 1;
      j += 1;
   } while(0)
宏后面加上一个分号;OK。
阅读(1143) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~