可能重复:
Why are there sometimes meaningless do/while and if/else statements in C/C++ macros?
您好,在许多C宏程序员中都使用特殊的单循环,例如:
#define do_something(a) do { execute(a); count(a); } while(0)
因为您想在循环中执行此宏并且不使用“{}”。 为什么他们不使用简单的块呢?我的意思是,不是
#define do_something(a) { execute(a); count(a); }
有同样的效果吗?
答案 0 :(得分:5)
由于
if( something ) do_something(a);
else something_else();
扩展为:
if( something ) do { execute(a); count(a); } while(0);
else something_else();
这是正确的,但是:
if( something ) { execute(a); cout(a); };
else something_else();
不正确(多余的“;”)。
答案 1 :(得分:1)
if (cond)
do_something(exp);
else
do_something_else(exp);
无效C.
答案 2 :(得分:1)
另一个原因是:你可以使用break来摆脱while循环。