#define 中的 do{ }while(0)

问题

C 语言经常使用如下宏定义一段函数

#define FUN(x) do {                                         \
               ....                                         \
        } while(0);

这里为何要用 do{ }while (0) 的形式?直接写成下面的样子,不也可以吗?

#define FUN(x) {                                  \
		  ....                                    \
        }

解答

考虑这样一种情况,我们定义宏函数FUN

#define FUN(x) {                                 \
	        func0();
	        func1();                             \
        } 

在如下场景使用它

if (true) 
	FUN(1);
else
    func2();

宏展开后,代码变成了

if(true)
   {
       func0();
       func1();
   }; //语法错误
else
   func2();

展开后多了分号,编译语法错误。
使用 do{ }while(0) 的形式定义FUN ,展开后

if(true)
    do {
    	func0();
    	func1();
	}while(0);
else 
    func2();

这样就没有语法错误了。

注意 #define 中的 do{} while(0) 后面没有分号,加上分号后,同样在上面的例子中有语法错误

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值