打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
关于宏定义中的do-while(0)循环

关于宏定义中的do-while(0)循环

(2011-11-02 15:16:12)
标签:

do-while(0) 

 

it 

分类: 实验室
在宏定义里面经常看到do{...}while(0)这样的语句。
确实很让人疑惑,do while(0)就是让代码只执行一次,何必这样呢,为什么需要用do while呢。
其实,宏定义就是一个代码替换的过程。
#define CODE_SEG(a) printf("samplemacro:%s\n",a) 
那么在出现了CODE_SEG(some_str)的地方,它都会在编译时被替换成printf("samplemacro:%s\n",some_str)

那么,我们写代码的习惯都是
...
char*s="hello world";
CODE_SEG(s);   //我们会习惯性地加上分号
...

这时,可以编译通过,因为 CODE_SEG(s)被替换成了printf("samplemacro:%s\n",s);

但是,如果我们的宏里面有不止一条语句,比如
#define CODE_SEG(a) {printf("samplemacro:%s\n",a);printf("done\n");} 
这样就行不通了,因为CODE_SEG(s);会被替换成
{printf("samplemacro:%s\n",a);printf("done\n");}最后面这个分号回导致编译不通过

因此,通常用do while(0)来包裹,这样就可以避免这个分号的问题
#define CODE_SEG(a) do{printf("samplemacro:%s\n",a);printf("done\n");}while(0)
 CODE_SEG(s)会被替换成
do{printf("samplemacro:%s\n",a);printf("done\n");}while(0);
最后的这个分号此时就是恰到好处了,编译通过。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
用宏构建自己的printf函数
E参数在gcc上的好处
#pragma CODE_SEG __NEAR_SEG NON_BANKED
#pragma CODE
iOS安全攻防(二十三):Objective-C代码混淆
C语言宏使用常见问题
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服