为什么在C中的宏中使用循环代替块

Gar*_*iel 2 c macros

可能重复:
为什么在C/C++宏中有时会出现无意义的do/while和if/else语句?

您好,在许多C宏程序员中使用特殊的单循环,例如:

#define do_something(a) do { execute(a); count(a); } while(0)
Run Code Online (Sandbox Code Playgroud)

因为你想在循环中执行这个宏而你不使用"{}".为什么他们不使用简单的块呢?我的意思是,不是

#define do_something(a) { execute(a); count(a); }
Run Code Online (Sandbox Code Playgroud)

有同样的效果?

Fru*_*nsi 5

因为

if( something ) do_something(a);
else something_else();
Run Code Online (Sandbox Code Playgroud)

扩展为:

if( something ) do { execute(a); count(a); } while(0);
else something_else();
Run Code Online (Sandbox Code Playgroud)

这是正确的,但是:

if( something ) { execute(a); cout(a); };
else something_else();
Run Code Online (Sandbox Code Playgroud)

不正确(多余的";").