c - C 中 do-while-false 的用例?

标签 c

<分区>

最近,我看到越来越多的代码片段使用以下模板:

do {
    ... some code ...
} while (false);

为什么要这样做?如果我没记错的话,代码将只运行一次,因此似乎不需要循环。

我主要接触这种风格是在 Windows 驱动程序和一些 API 的低级操作中。

最佳答案

它有时用于实现“结构化 goto”。在这样的 do-while 区域中,breakcontinue 语句将把控制权传递到区域的末尾,并继续执行“周期”。

评论中已经提到的另一个用途是在宏中用作复合语句信封。 do-while 的独特之处在于它需要一个 ; 最后。这允许它作为复合语句信封工作,将“使用”以下 ;。该功能允许编写类似函数的宏,允许调用者安全地放置 ; 在它们之后(参见此处:What does "do { ... } while (0)" do exactly in kernel code?)

关于c - C 中 do-while-false 的用例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27536017/

相关文章:

c - 反转 C 中字符串中的单词顺序

未在文本文件中捕获段错误标准输出重定向时的 C 程序

c - 为什么即使我定义了 _GNU_SOURCE 也无法访问 uname 结构体的域名成员

c - 为什么 "++x ||++y &&++z"先计算 "++x",即使运算符 "&&"的优先级高于 "||"

c - 针对 glib 进行编译时出现链接器错误...?

c - 二进制文件处理 - fseek() 到结构内的某个字段

python - 了解递归调用中的 Python 列表内存使用情况

c - 如何在 C 中编写线程安全、高效、无锁的内存分配器?

c - 使用头节点反转双向链表

c - 回调分配期间出现“无法从...转换”错误(从 C 迁移代码)