打印

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

[复制链接]
3392|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
john_light|  楼主 | 2011-2-22 15:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
老鱼探戈| | 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楼的头脑。

使用特权

评论回复
5
nevsayno| | 2011-2-22 16:57 | 只看该作者
#define MACRO_TEST {xxx1;xxx2;}

if(xxxxx)
    MACRO_TEST;
else
    ...;

这样子有没有问题?

改成这样:
#define MACRO_TEST do{xxx1;xxx2;}while(0)
问题是不是解决了?

使用特权

评论回复
6
ayb_ice| | 2011-2-22 17:03 | 只看该作者
主要是利用do while 的{}

使用特权

评论回复
7
电子乌托邦| | 2011-2-22 17:03 | 只看该作者
标记

使用特权

评论回复
8
johnwjl| | 2011-2-22 21:36 | 只看该作者
多条语句时才有必要用do while(0)

使用特权

评论回复
9
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,这个分号

使用特权

评论回复
10
ippopotame| | 2011-2-23 11:50 | 只看该作者
如果
#define MACRO_TEST {xxx1;xxx2;}
那么
if(xxxxx)
    MACRO_TEST;
else
    ...;
里的MACRO_TEST又会被替换成
f(xxxxx)
    MACRO_TEST;
else
    ...;
就这样不停被替代下去了

使用特权

评论回复
11
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分少了点,惭愧。

使用特权

评论回复
12
john_light|  楼主 | 2011-2-24 09:51 | 只看该作者
还没理解的同学,速度围观以下网址:http://www.noveltheory.com/TechPapers/while.htm

使用特权

评论回复
13
xuyaosong| | 2011-2-24 11:02 | 只看该作者
了然

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

34

主题

1094

帖子

2

粉丝