【问题标题】:Use cases of do-while-false in C? [duplicate]C语言中do-while-false的用例? [复制]
【发布时间】:2014-12-17 22:26:41
【问题描述】:

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

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

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

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

【问题讨论】:

标签: c


【解决方案1】:

它有时用于实现“结构化 goto”。在 do-while 区域内,breakcontinue 语句会将控制权传递到区域的末尾,并继续执行此类“循环”之后的代码。

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

【讨论】:

【解决方案2】:

这样的一个例子是在这个“循环”内有条件中断。您可以停止执行其余代码 - 一种避免臭名昭著的“goto”的复杂方法。

【讨论】:

    【解决方案3】:

    这是一种流控制样式,允许跳过do { code block } while( false ); 代码块中的所有剩余代码。当您想停止处理代码块中的剩余代码,但仍执行while(false); 之后的剩余代码时非常有用。例如,这是一种常见的模式,允许函数在发生错误后进行清理。

    换句话说:这是一种“隐藏”goto 功能的方法。

    【讨论】:

      猜你喜欢
      • 2022-01-03
      • 2020-08-26
      • 2014-10-03
      • 2023-02-15
      • 2015-04-24
      • 1970-01-01
      • 1970-01-01
      • 2021-03-12
      相关资源
      最近更新 更多