您的位置:首页 > 编程语言 > C语言/C++

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

2014-08-16 23:09 148 查看
在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) 的形式来定义宏是一个良好的代码习惯。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C c++