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);