2011-05-22 41 views
2

可能重复:
Why are there sometimes meaningless do/while and if/else statements in C/C++ macros?为什么要用循环,而不是在宏块用C

您好,在很多C宏程序员使用特殊的一环,例如:

#define do_something(a) do { execute(a); count(a); } while(0) 

因为当你想在循环中做这个宏并且你不使用“{}”。 为什么他们不使用简单的块呢?我的意思是,不是

#define do_something(a) { execute(a); count(a); } 

有非常相同的效果?

回答

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
if (cond) 
    do_something(exp); 
else 
    do_something_else(exp); 

不会是有效的C.

1

另一个原因:你可以使用break来摆脱while循环。

+1

-1:什么?这不是原因。 – 2011-05-22 16:54:22

+0

这不是原因,但它是一个原因。 – Hogan 2011-05-22 17:05:05

相关问题