作为C新手,我无法理解the following code:
#define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); \
} while (0)
我收集到这个函数为#define
d的原因是覆盖现有函数,但是{em}无条件 {{1}的do ... while(0)
循环的重点是什么声明?如果没有循环结构,是不是可以写这个?
答案 0 :(得分:8)
我认为这里有很多重复。
do...while(0)
技巧使您可以在各种情况下使用errExit
而不会破坏任何内容:
if(x) errExit(msg);
else return 1;
被翻译为:
if(x) do { ...; ...; } while(0);
else return 1;
如果省略do...while(0)
部分,则无法可靠地添加分号。
答案 1 :(得分:2)
假设宏没有do { ... } while(0)
循环,只有里面的2个语句。现在,如果我要写
if( foo() )
errExit("foo!" );
我的有条件退出已成为无条件退出。
答案 2 :(得分:1)
对于多个语句的宏函数,do { ... } while(0)
构造是常见的,通常被认为是最佳实践,例如。它允许用作单个语句,因此没有任何意外。