为了账号安全,请及时绑定邮箱和手机立即绑定

当我们定义一个宏时,do When(0)有什么用途?

当我们定义一个宏时,do When(0)有什么用途?

C
慕后森 2019-07-15 15:54:00
当我们定义一个宏时,do When(0)有什么用途?我正在阅读Linux内核,我发现许多宏都是这样的:#define INIT_LIST_HEAD(ptr) do { \    (ptr)->next = (ptr); (ptr)->prev = (ptr); \} while (0)为什么他们使用这个而不是简单地在{}中定义它?
查看完整描述

3 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

你可以用分号跟随它,使它看起来更像一个函数。它还可以正确地处理if/etc子句。

如果没有while(0),上面的代码将无法使用

if (doit) 
   INIT_LIST_HEAD(x);
 else 
   displayError(x);

因为宏后面的分号会“吃掉”OSE子句,而上面的分号甚至不会编译。


查看完整回答
反对 回复 2019-07-15
?
眼眸繁星

TA贡献1873条经验 获得超9个赞

它将扩展为“{(PTR)->Next.}”,因此,一个语句后面跟着第二个语句。如果语法是“if(表达式)语句”。否则不会与任何if相关联,因为您会编写“if(表达式)语句”(一个“{.}”和一个“语句”)。

查看完整回答
反对 回复 2019-07-15
  • 3 回答
  • 0 关注
  • 428 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信