C++ 宏 为什么建议 do while (0) 的写法

22 篇文章 0 订阅

在C++中,在使用宏的时候,建议使用do { xxxx;} while(0)的写法


好处主要有以下:

1、可以将其当作一个整体,避免当宏是有多行组成时被拆分

比如 

#define Foo(x)  Action1();Action2();

而在比如 if (x > 3)  Foo(x);调用时。

根据宏替换后,就是 if(x>3) Action1();Action2();

此时只有Action1()在if的逻辑分支之前,而Action2()是不在if的逻辑分支之下的。


而 #define Foo(x)  {Action1(); Action2();}  则可以解决上面的问题。

2、 既然用{}可以解决block的问题,为什么还需要使用do while呢

看第二种场景

还是上面的宏: #define Foo(x)  {Action1(); Action2();}

比如我们使用场景为:

if {x > 3} Foo(x);

else .....;

此时宏替换后就是:

if(x>3) {Action1(); Action2()};

else .....;

注意此时上面的这个分号是会导致编译错误的。

而将宏写成如下形式:

#define Foo(x)  do{Action1(); Action2();}while(0)

还是上面的调用场景:

宏替换后就是:

if(x>3) do{Action1(); Action2()}while)(0);

else .....;

此时就不会出现编译错误。


所以使用do {。。。}while(0) 的形式来定义宏是一个良好的代码习惯。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值