为何使用条件为假的do...while宏定义?

[复制链接]
5084|12
 楼主| john_light 发表于 2011-2-22 15:33 | 显示全部楼层 |阅读模式
之前有人讨论过,暂时找不着了。

形如:
#define INTERRUPT_ENABLE() do{EA = 1;}while(0)
它如何代表C语言先进文化的前进方向?
老鱼探戈 发表于 2011-2-22 16:19 | 显示全部楼层
开中断而已
开完中断,条件不成立就退出了。

至于前进方向就不得而知了
nevsayno 发表于 2011-2-22 16:52 | 显示全部楼层
在if else时使用宏  你自己分析下 如果不采用do while的方式会带来什么问题
 楼主| john_light 发表于 2011-2-22 16:55 | 显示全部楼层
2楼,前进方向这个是为了应景而已,不必在意。

和if...else有什么关系?目前还没摸到3楼的头脑。
nevsayno 发表于 2011-2-22 16:57 | 显示全部楼层
#define MACRO_TEST {xxx1;xxx2;}

if(xxxxx)
    MACRO_TEST;
else
    ...;

这样子有没有问题?

改成这样:
#define MACRO_TEST do{xxx1;xxx2;}while(0)
问题是不是解决了?
ayb_ice 发表于 2011-2-22 17:03 | 显示全部楼层
主要是利用do while 的{}
电子乌托邦 发表于 2011-2-22 17:03 | 显示全部楼层
johnwjl 发表于 2011-2-22 21:36 | 显示全部楼层
多条语句时才有必要用do while(0)
adams.gh 发表于 2011-2-22 23:34 | 显示全部楼层
本帖最后由 adams.gh 于 2011-2-23 13:26 编辑
#define MACRO_TEST {xxx1;xxx2;}

if(xxxxx)
    MACRO_TEST;
else
    ...;

这样子有没有问题?

改成这样:
#define MACRO_TEST do{xxx1;xxx2;}while(0)
问题是不是解决了?
nevsayno 发表于 2011-2-22 16:57


ha,这个分号
ippopotame 发表于 2011-2-23 11:50 | 显示全部楼层
如果
#define MACRO_TEST {xxx1;xxx2;}
那么
if(xxxxx)
    MACRO_TEST;
else
    ...;
里的MACRO_TEST又会被替换成
f(xxxxx)
    MACRO_TEST;
else
    ...;
就这样不停被替代下去了
 楼主| john_light 发表于 2011-2-24 09:46 | 显示全部楼层
纵观以上回复:
2楼关注的是例子本身;(我这个问题的侧重点在于while(0)而不是EA=1;)
3楼犹抱琵琶半遮面,在5楼终于挤出一点提示;(应该进入教育界)(4)
6楼言简意赅;(想展开讨论,但费时费力,大家自己理解去)(2)
8楼总结得不错;(和6楼相辅相成)(2)
9楼理解并找到乐趣;(感觉是个找BUG高手)(2)
10楼的基本概念有待加强。

10分少了点,惭愧。
 楼主| john_light 发表于 2011-2-24 09:51 | 显示全部楼层
还没理解的同学,速度围观以下网址:http://www.noveltheory.com/TechPapers/while.htm
xuyaosong 发表于 2011-2-24 11:02 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:这是俺在自留地里种的几棵ARM/Linux/MySQL/PHP苗

34

主题

1094

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部