免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: yjh777
打印 上一主题 下一主题

do {} while(0); 到底有什么作用。 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2005-12-16 13:30 |只看该作者
原帖由 zalem 于 2005-12-16 13:26 发表


真见过,在那个RO私服的Athena源码里...多个空文而已

do {} while(0); 和  {} 是完全等价的,
所以没必要写这么复杂。

问题:
哪位同学能举出一个例子,让 do {} while(0); 和 {} 不等价?

论坛徽章:
0
12 [报告]
发表于 2005-12-16 13:44 |只看该作者
原帖由 思平 于 2005-12-16 13:30 发表

do {} while(0); 和  {} 是完全等价的,
所以没必要写这么复杂。

问题:
哪位同学能举出一个例子,让 do {} while(0); 和 {} 不等价?


你回复前我就悔过了...

  1. #include <stdio.h>

  2. #define dd do{puts("a");}while(0);
  3. int main()
  4. {
  5.     if(1)
  6.         dd;
  7.     else
  8.         dd;

  9.     return 0;
  10. }
复制代码
localhost:~/c# LC_ALL=C gcc a.c
a.c: In function `main':
a.c:8: parse error before "else"

[ 本帖最后由 zalem 于 2005-12-16 13:46 编辑 ]

论坛徽章:
0
13 [报告]
发表于 2005-12-16 13:46 |只看该作者
to 思平,

这是区别。

你将main()中的F2换为F1就不行了。



  1. #define F1(C)                                   \
  2. {                                               \
  3.   return C;                                     \
  4. }

  5. #define F2(C)                                   \
  6. do                                              \
  7. {                                               \
  8.   return C;                                     \
  9. }                                               \
  10. while (0)


  11. int a, b, c;
  12. int main ()
  13. {
  14. if(a == b)
  15.      F2(c);
  16. else
  17.      return a;
  18. }
复制代码

论坛徽章:
0
14 [报告]
发表于 2005-12-16 14:06 |只看该作者
原帖由 思一克 于 2005-12-16 13:46 发表
to 思平,

这是区别。

你将main()中的F2换为F1就不行了。


[CODE]
#define F1(C)                                   \
{                                               \
  return C;            ...

你没有仔细看,
我说的是:
原帖由 思平 于 2005-12-16 13:30 发表

do {} while(0); 和  {} 是完全等价的,
所以没必要写这么复杂。

问题:
哪位同学能举出一个例子,让 do {} while(0); 和 {} 不等价?


其实我早就说过了:
原帖由 思平 于 2005-12-16 13:19 发表
没见过 do {} while(0); 这种宏,
只见过 do {} while(0) 这种宏

论坛徽章:
0
15 [报告]
发表于 2005-12-16 14:08 |只看该作者
原帖由 zalem 于 2005-12-16 13:44 发表


你回复前我就悔过了...

不用说“悔过”这么难听吧?
呵呵,大家讨论讨论而已嘛。

论坛徽章:
0
16 [报告]
发表于 2005-12-16 14:26 |只看该作者
原帖由 思平 于 2005-12-16 13:30 发表

do {} while(0); 和  {} 是完全等价的,
所以没必要写这么复杂。

问题:
哪位同学能举出一个例子,让 do {} while(0); 和 {} 不等价?


{
    break;
}

do
{
   break;
}
while(0);
不等价,呵呵

论坛徽章:
0
17 [报告]
发表于 2005-12-16 14:28 |只看该作者
原帖由 wqmmmmm 于 2005-12-16 14:26 发表


{
    break;
}

do
{
   break;
}
while(0);
不等价,呵呵

兄弟呀!
那是宏的内容,
不是使用时的差别啊。
没事干写什么 break 啊。

论坛徽章:
0
18 [报告]
发表于 2005-12-16 14:30 |只看该作者
原帖由 思平 于 2005-12-16 14:28 发表

兄弟呀!
那是宏的内容,
不是使用时的差别啊。
没事干写什么 break 啊。


不是没事,有的时候需要这么用呀
宏里面一样可以这么用呀
难道宏里面不能使用break语句。。。。。  呵呵

论坛徽章:
0
19 [报告]
发表于 2005-12-16 14:33 |只看该作者
原帖由 wqmmmmm 于 2005-12-16 14:30 发表


不是没事,有的时候需要这么用呀
宏里面一样可以这么用呀
难道宏里面不能使用break语句。。。。。  呵呵

呵呵,算你狠!
这算一种情况。
其它呢?

论坛徽章:
84
每日论坛发贴之星
日期:2015-12-29 06:20:00每日论坛发贴之星
日期:2016-01-16 06:20:00每周论坛发贴之星
日期:2016-01-17 22:22:00程序设计版块每日发帖之星
日期:2016-01-20 06:20:00每日论坛发贴之星
日期:2016-01-20 06:20:00程序设计版块每日发帖之星
日期:2016-01-21 06:20:00每日论坛发贴之星
日期:2016-01-21 06:20:00程序设计版块每日发帖之星
日期:2016-01-23 06:20:00程序设计版块每日发帖之星
日期:2016-01-31 06:20:00数据库技术版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-14 06:20:00
20 [报告]
发表于 2005-12-16 15:41 |只看该作者
原帖由 思平 于 2005-12-16 13:19 发表
没见过 do {} while(0); 这种宏,
只见过 do {} while(0) 这种宏


不好意思,我多加了一个;  不过不影响,多个空语句而已。

至于跟 {} 的区别,albcamus 已经说的很清楚了,没有必要再讨论了吧!

[ 本帖最后由 yjh777 于 2005-12-16 15:45 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP