delphij's Chaos

选择chaos这个词是因为~~实在很难找到一个更合适的词来形容这儿了……

04 Mar 2006

while(0)是干吗的?

今天 renzhen 同学问起为什么很多宏都定义为 do { something… } while(0),我也顺便温习了一下。

简而言之:如果希望宏表现的和函数接近,就需要这样做。

更长的版本:

考虑宏FOO(x):

#define FOO(x) \
{ \
return x; \
}

和宏 BAR(x):
#define FOO(x) do \
{ \
return x; \
} while(0)

在下面的环境中:

if (x)
FOO(x);
else
BAR(x);