while(0)是干吗的?

• 本文约 124 字,阅读大致需要 1 分钟 | Development

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