l0b*_*0b0 5 c function while-loop c-preprocessor
作为C新手,我无法理解以下代码:
#define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); \
} while (0)
Run Code Online (Sandbox Code Playgroud)
我收集到这个函数的原因#define
是覆盖现有函数,但是do ... while(0)
带有无条件 exit()
语句的循环有什么意义呢?如果没有循环结构,是不是可以写这个?
我想在这里有很多重复.
这个do...while(0)
技巧使您可以errExit
在各种环境中使用而不会破坏任何东西:
if(x) errExit(msg);
else return 1;
Run Code Online (Sandbox Code Playgroud)
被翻译成:
if(x) do { ...; ...; } while(0);
else return 1;
Run Code Online (Sandbox Code Playgroud)
如果省略该do...while(0)
部分,则无法可靠地添加分号.
假设宏没有循环do { ... } while(0)
,只有里面的 2 条语句。现在,如果我写怎么办
if( foo() )
errExit("foo!" );
Run Code Online (Sandbox Code Playgroud)
我的有条件退出变成了无条件退出。
归档时间: |
|
查看次数: |
709 次 |
最近记录: |