原帖由 草草 于 2005-12-16 12:41 发表
用在宏里面。
当宏里面有if时,可以起到封闭代码作用,防止与外面的 if 混淆。
比如定义宏,#define FREE1(p) if (p) free (p)
而在代码部分这样调用宏:
if (expression)
FREE1(p)
else
printf(“exp ...
原帖由 wqmmmmm 于 2005-12-16 12:45 发表
这根直接封个大括号有什么区别。还用得着do while?
原帖由 albcamus 于 2005-12-16 12:56 发表
你仔细理解一下:
#define FREE1(p) {if (p) free (p) }
if (expression)
FREE1(p)
else
printf(“expression was false.\n”) ;
预处理之后,就变成了这样:
if (expression)
{if (p) free ...
原帖由 思平 于 2005-12-16 13:19 发表
没见过 do {} while(0); 这种宏,
只见过 do {} while(0) 这种宏
原帖由 zalem 于 2005-12-16 13:26 发表
真见过,在那个RO私服的Athena源码里...多个空文而已
原帖由 思平 于 2005-12-16 13:30 发表
do {} while(0); 和 {} 是完全等价的,
所以没必要写这么复杂。
问题:
哪位同学能举出一个例子,让 do {} while(0); 和 {} 不等价?
localhost:~/c# LC_ALL=C gcc a.c
a.c: In function `main':
a.c:8: parse error before "else"
原帖由 思一克 于 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) 这种宏
原帖由 zalem 于 2005-12-16 13:44 发表
你回复前我就悔过了...
原帖由 思平 于 2005-12-16 13:30 发表
do {} while(0); 和 {} 是完全等价的,
所以没必要写这么复杂。
问题:
哪位同学能举出一个例子,让 do {} while(0); 和 {} 不等价?
原帖由 wqmmmmm 于 2005-12-16 14:26 发表
{
break;
}
do
{
break;
}
while(0);
不等价,呵呵
原帖由 思平 于 2005-12-16 14:28 发表
兄弟呀!
那是宏的内容,
不是使用时的差别啊。
没事干写什么 break 啊。
原帖由 wqmmmmm 于 2005-12-16 14:30 发表
不是没事,有的时候需要这么用呀
宏里面一样可以这么用呀
难道宏里面不能使用break语句。。。。。 呵呵
原帖由 思平 于 2005-12-16 13:19 发表
没见过 do {} while(0); 这种宏,
只见过 do {} while(0) 这种宏
原帖由 yjh777 于 2005-12-16 15:41 发表
不好意思,我多加了一个; 不过不影响,多个空语句而已。
至于跟 {} 的区别,albcamus 已经说的很清楚了,没有必要再讨论了吧!![]()
原帖由 yjh777 于 2005-12-16 12:25 发表
如题,把一个宏定义成do {} while(0); 到底有什么作用。
请教。
原帖由 思平 于 2005-12-16 18:56 发表
根本不是那么回事。
如果你好学的话,就应该自己再仔细想想。
不然就算了。![]()
![]()
![]()
原帖由 yjh777 于 2005-12-20 08:41 发表
确实不应该加分号,谢谢!
do {} while(0); 与 {} 等价
do {} while(0) 与 {} 不等价
原帖由 mq110 于 2005-12-20 08:46 发表
兄弟是大连哪的? 看来很闲的样子.不像是工作的.
原帖由 yjh777 于 2005-12-20 08:50 发表
是,工作了,这两天不太忙,以前的问题没仔细想,发帖子跟大家讨论讨论。
你还在念书?
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |