参见英文答案 > how does do{} while(0) work in macro? 3个
> Why use apparently meaningless do-while and if-else statements in macros? 11个
以这种方式定义宏的原因是什么:
#define test_errno(msg) do{if (errno) {perror(msg); exit(EXIT_FAILURE);}} while(0)
我的意思是什么是{}而(0)背后的原因是什么?当然它只会做一次,零是恒定的,不能以某种方式改变为非零,那么为什么要使用这样的结构呢?
解决方法:
它允许像这样的东西
if (condition)
test_errno(...);
无论有没有大括号,都能正常工作.