Chinaunix

标题: 请教大牛们一个关于宏定义中while(0) 这种格式是什么意思 [打印本页]

作者: Coolriver    时间: 2010-07-26 16:17
标题: 请教大牛们一个关于宏定义中while(0) 这种格式是什么意思
如这种形式: 
  1. #define ut_a(EXPR) do {                                         \
  2.         if (UT_DBG_FAIL(EXPR)) {                                \
  3.                 ut_dbg_assertion_failed(#EXPR,                  \
  4.                                 __FILE__, (ulint) __LINE__);    \
  5.                 UT_DBG_PANIC;                                   \
  6.         }                                                       \
  7.         UT_DBG_STOP;                                            \
  8. } while (0)
复制代码
为什么要这样定义呢?
作者: zylthinking    时间: 2010-07-26 16:20
这个比较月经, 每月出现一次
作者: rain_fish    时间: 2010-07-26 16:21
如果不想用goto,使用
do
{
    if ( true )
        break;
}while(0)

是个好办法。。。
作者: 梅川内依酷    时间: 2010-07-26 16:22
封装
作者: zhangsuozhu    时间: 2010-07-26 16:23
本帖最后由 zhangsuozhu 于 2010-07-26 18:13 编辑

为了让宏象函数一样       while(xxx){ut_a(zzz);} 或 while(xxx)ut_a(zzz); if(xxx)ut_a(zzz);else xxxx; 都能用
作者: Coolriver    时间: 2010-07-26 16:32
谢谢各位大牛。

顺便在此BS一下那个用生殖系统思考问题的大牛。
这个比较月经, 每月出现一次
zylthinking 发表于 2010-07-26 16:20

作者: zhangsuozhu    时间: 2010-07-26 16:38
谢谢各位大牛。

顺便在此BS一下那个用生殖系统思考问题的大牛。
Coolriver 发表于 2010-07-26 16:32



    你误会他啦,他的意思是说这样的问题每个月都会有几个人提问。网上管这个叫月经贴。呵呵
作者: zylthinking    时间: 2010-07-26 16:40
靠。。。。。。。。无语了。。。。。。。。。。。
作者: wmmy2008    时间: 2010-07-26 17:32
确实是月经,看到过几次了。
作者: teng0210    时间: 2010-07-26 17:37
刚才
百度了下关键词
while(0) 宏
作者: rain_fish    时间: 2010-07-26 17:56
看来这招杀伤力很强啊
作者: Coolriver    时间: 2010-07-26 18:02
靠。。。。。。。。无语了。。。。。。。。。。。
zylthinking 发表于 2010-07-26 16:40



   

刚才
百度了下关键词
while(0) 宏
teng0210 发表于 2010-07-26 17:37


谢谢你的方法,我以后会先去Search一下的。再次谢谢。
作者: mirnshi    时间: 2010-07-26 18:36
加强自身学习,减少xx贴。
作者: supermanflytige    时间: 2010-07-26 18:57
baidu while(0)吧
作者: wenjianhn    时间: 2010-07-26 21:01
An Inline Function is As Fast As a Macro
http://gcc.gnu.org/onlinedocs/gcc-4.3.4/gcc/Inline.html
作者: zbhddt6    时间: 2010-07-26 21:39
要不会引起if else嵌套逻辑的问题~~
作者: ubuntuer    时间: 2010-07-26 23:11
这个快成月经帖了~~~~
作者: srdgame    时间: 2010-07-27 11:20
谢谢各位大牛。

顺便在此BS一下那个用生殖系统思考问题的大牛。
Coolriver 发表于 2010-07-26 16:32


真不知道你这斑竹是怎么来的。。
作者: Coolriver    时间: 2010-07-27 16:59
真不知道你这斑竹是怎么来的。。
srdgame 发表于 2010-07-27 11:20



    各行有专攻。
 对于C我是新手。
 :)
作者: tempname2    时间: 2010-07-27 19:47
如果不想用goto,使用
do
{
    if ( true )
        break;
}while(0)

是个好办法。。。


虽然LZ好像不是问的这个,但是我得说,多逛论坛可以学到东西。。。。。。
作者: rain_fish    时间: 2010-07-27 20:58
虽然LZ好像不是问的这个,但是我得说,多逛论坛可以学到东西。。。。。。
tempname2 发表于 2010-07-27 19:47



    呵呵。。。。
作者: srdgame    时间: 2010-07-28 18:02
回复 19# Coolriver


    我指的是“月经“呵呵。
作者: ssuclinux    时间: 2010-07-28 18:20
又经




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2