最近,我看到越来越多使用以下模板的代码:
do {
... some code ...
} while (false);
为什么要这样做?如果我没有弄错,代码将只运行一次,因此似乎不需要循环。
我对这种风格的主要体现在于Windows驱动程序,以及某些API中的低级操作。
答案 0 :(得分:8)
它有时用于实现“结构化goto”。在此类do-while
区break
和continue
语句中,会将控制权传递给区域的末尾,并继续执行此类“循环”之后的代码。
评论中已经提到的另一个用途是作为宏内的复合语句包络。 do-while
的独特之处在于它最后需要;
。这使它可以作为复合语句包络,“消耗”以下;
。该功能允许用户编写类似函数的宏,允许调用者在其后安全地放置;
(参见此处:What does "do { ... } while (0)" do exactly in kernel code?)
答案 1 :(得分:1)
这样的一个例子是在这个“循环”中有条件中断。你可以停止执行其余的代码 - 一些复杂的方法来避免臭名昭着的“转到”。
答案 2 :(得分:1)
它是一种流控制样式,允许跳过do { code block } while( false );
代码块中的所有剩余代码。当您想要停止处理代码块中的剩余代码但仍然在while(false);
之后执行其余代码时非常有用。例如,这是允许函数在发生错误后进行清理的常见模式。
换句话说:这是一种隐藏" goto
功能。