在C中使用do-while-false的情况?

时间:2014-12-17 22:26:41

标签: c

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

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

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

我对这种风格的主要体现在于Windows驱动程序,以及某些API中的低级操作。

3 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:1)

这样的一个例子是在这个“循环”中有条件中断。你可以停止执行其余的代码 - 一些复杂的方法来避免臭名昭着的“转到”。

答案 2 :(得分:1)

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

换句话说:这是一种隐藏" goto功能。