免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2097 | 回复: 8
打印 上一主题 下一主题

宏问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-10-10 20:37 |只看该作者 |倒序浏览
以前就有这个疑问,一直放着。
这次又看到,实在想不明白;

在定义一个宏操作时:

#define dosmething \
do {\
  操作\
}\
while(0)

为什么要加上一个do{} while(0)?????

论坛徽章:
0
2 [报告]
发表于 2007-10-10 21:54 |只看该作者
??????????????又自己沙发啊!

论坛徽章:
0
3 [报告]
发表于 2007-10-10 22:10 |只看该作者
这样做的主要目的是让这个define可以像一条语句那样使用,例如
if (...)
  something;
如果不加do {}while (0),就需要写成
if (...)
{
  something;
}

论坛徽章:
0
4 [报告]
发表于 2007-10-10 22:13 |只看该作者
原帖由 融化的冰山 于 2007-10-10 22:10 发表
这样做的主要目的是让这个define可以像一条语句那样使用,例如
if (...)
  something;
如果不加do {}while (0),就需要写成
if (...)
{
  something;
}



...............,不对味啊!!!!!!!

不置可否!

论坛徽章:
0
5 [报告]
发表于 2007-10-10 22:23 |只看该作者
就是执行一次的意思哦。因为有 {},所以里面可以定义一些局部变量。其实直接用 {} 就可以了,没必要 do while

论坛徽章:
0
6 [报告]
发表于 2007-10-10 22:57 |只看该作者
原帖由 mmmixx 于 2007-10-10 22:23 发表
就是执行一次的意思哦。因为有 {},所以里面可以定义一些局部变量。其实直接用 {} 就可以了,没必要 do while

不知道是那本书上说了do ... while(0)是为了防止错误的if匹配,让大家觉得它只有这么一个用法了,其实它还可以在宏里面加break。
例如

  1. #define T(x) do \
  2. { \
  3. 操作 \
  4. if (x) \
  5.     break; \
  6. 操作 \
  7. } while(0)

复制代码

当然你还可以用其它写法代替,但它确实提供了这么一个功能

论坛徽章:
0
7 [报告]
发表于 2007-10-10 23:04 |只看该作者
防止错误的if匹配防止的是什么样一种情况呢?

加break这个功能不错,挺方便的。

论坛徽章:
1
摩羯座
日期:2013-10-23 12:41:02
8 [报告]
发表于 2007-10-11 13:36 |只看该作者
这个问题《Linux场景模式》里面介绍了

论坛徽章:
0
9 [报告]
发表于 2007-10-11 14:15 |只看该作者
原帖由 dj_ukyo 于 2007-10-11 13:36 发表
这个问题《Linux场景模式》里面介绍了


手头没书,大侠们详细举例说明一下!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP