Chinaunix首页 | 论坛 | 博客
  • 博客访问: 370720
  • 博文数量: 66
  • 博客积分: 3201
  • 博客等级: 中校
  • 技术积分: 695
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-04 11:17
文章分类

全部博文(66)

文章存档

2016年(1)

2014年(1)

2012年(1)

2011年(2)

2010年(18)

2009年(42)

2008年(1)

分类:

2009-05-12 16:57:00

经常看到manpages里有类似
#define handle_error(msg) \
           do { perror(msg); exit(EXIT_FAILURE); } while (0)
看到一次也没在意,看多了,感觉怎么那么别扭,就搜索了一下,发现的确是有来头的:

 #define FOO(x) { do_this(x); do_that(); }
如下情况就会有错误,大括号外多了分号
 if (x>y)
FOO(x);
else
FOO(y);
但,可以解决,写成
if (x>y)
FOO(x)
else
FOO(y)
不过很别扭,而且很容易混淆,忘记

如果这样定义
#define FOO(x) do_this(x); do_that();
那导致do_that();多出来造成语法错误

所以,这样定义
#define FOO(x) do { do_this(x); do_that(); } while(0)

接下来它就把几个语句包裹起来了。
阅读(1289) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~