最近,我看到越来越多的代码片段使用以下模板:
do {
... some code ...
} while (false);
Run Code Online (Sandbox Code Playgroud)
为什么要这样做?如果我没有弄错,代码将只运行一次,因此似乎不需要循环.
我对这种风格的主要遇到的是Windows驱动程序,以及某些API中的低级操作.
它有时用于实现"结构化goto".在这样的do-while区域break和continue语句内部将控制传递到区域的末尾并继续执行遵循这种"循环"的代码.
评论中已经提到的另一个用途是作为宏内的复合语句包络.它的独特之do-while处在于它;最终需要一个.这使它可以作为复合语句包络,"消耗"以下内容;.该功能允许用户编写类似函数的宏,允许调用者安全地放置;它们(参见这里:"do {...} while(0)"在内核代码中做了什么?)
| 归档时间: |
|
| 查看次数: |
321 次 |
| 最近记录: |