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

时间:2011-05-22 16:39:59

标签: c macros

  

可能重复:
  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); }

有同样的效果吗?

3 个答案:

答案 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循环。