c – 为什么宏以这种方式声明?

参见英文答案 > 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(...);

无论有没有大括号,都能正常工作.

上一篇:linux下,函数执行错误打印


下一篇:[Errno 12] Timeout on