为什么Linux有这么多“虚拟”代码?

时间:2011-05-04 15:44:13

标签: c linux linux-kernel

  

可能重复:
  What's the use of do while(0) when we define a macro?

当我阅读Linux内核代码时,头文件通常有#define块看起来像(来自2.6.37中的include/linux/wait.h):

#define init_waitqueue_head(q)  \
    do {                        \
        ...                     \
    } while (0)

当“循环”只执行一次时do...while序列的目的是什么?程序员想要为临时变量打开一个新的范围是有道理的,但这不需要do...while存在。它只是语法糖,还是以某种方式帮助编译器?

同样,我已经看到了一行代码if看起来像(来自include/linux/kfifo.h):

#define kfifo_put(fifo, val) \
    ...                      \
    if (0) {                 \
        ...                  \
    }

同样在#define中,为什么不删除那个花絮而不是让它永远不会运行?我会注意到,在kfifo_put定义中,范围界定以{开头,以}结束而没有do...while循环。

0 个答案:

没有答案