c - 为什么在 C 中是 `do { ...; exit(...); } while (0)`?

标签 c function while-loop c-preprocessor

<分区>

作为 C 新手,我在理解方面遇到了困难 the following code :

#define errExit(msg)    do { perror(msg); exit(EXIT_FAILURE); \
                           } while (0)

我了解到这个函数是 #defined 的原因是要覆盖现有函数,但是 do ... while(0) 的意义何在?使用 unconditional exit() 语句循环?没有循环结构就不可能写这个吗?

最佳答案

我认为这里有很多重复项。

do...while(0) 技巧使您能够在各种上下文中使用 errExit 而不会破坏任何内容:

if(x) errExit(msg);
else return 1;

翻译成:

if(x) do { ...; ...; } while(0);
else return 1;

如果省略 do...while(0) 部分,则无法可靠地添加分号等。

关于c - 为什么在 C 中是 `do { ...; exit(...); } while (0)`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15550398/

相关文章:

c - UPNP - 设备和服务之间的绑定(bind) (miniupnp)

c++ - 示例代码中的范围问题,使用分隔符将字符串的std::string拆分为std::vector

javascript - jQuery:在一个事件和一个选择器上调用两个函数并在它们之间传递数据

c - Free() 语句崩溃?帮助这个函数解决:(

c++ - 为什么在比较 time_t 值时我的 While-Loop 不停止?

c++ - 为什么我的 while 语句不起作用?

c - 管道陷入读取状态(C - 系统调用)

c - 进程在不应运行的线程中崩溃

c - printf 和 scanf 如何循环工作?为什么我在 scanf 中不需要\n?

buffer-overflow - 如何将没有对应 ASCII 的十六进制字符作为输入传递给 C 程序