码迷,mamicode.com
首页 > 系统相关 > 详细

Linux Kernel: the " do { ... } while(0)" magic

时间:2016-05-02 12:57:36      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:

在读Linux源码的时候看到一堆这种macro:

#define FOO(X) do { f(X); g(X); } while (0)

一直想不明白,为什么不直接用

#define FOO(X) f(x);g(x);

或者:

#define FOO(X) {f(x);g(x);}

 

搜了一下才明白:

  http://stackoverflow.com/questions/9495962/why-use-do-while-0-in-macro-definition

  http://stackoverflow.com/questions/154136/why-use-apparently-meaningless-do-while-and-if-else-statements-in-c-c-macros

 

 

 

真是源码面前,了无秘密。虽然不可能全盘读完,但是读得越多,发现的黑科技越多。

 

 

 

 

 

 

 

 

 

:)

Linux Kernel: the " do { ... } while(0)" magic

标签:

原文地址:http://www.cnblogs.com/walkerlala/p/5452122.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!