【发布时间】:2013-07-17 13:41:16
【问题描述】:
我在阅读 linux 源代码时发现了一些奇怪的语法。 container_of 宏看起来像
#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})
让我感到困惑的是 ({statement1; statement2;}) 之类的语法
我尝试了一些简单的代码,例如
int a = {1;2;};
我用 gcc 编译它。运行后,'a' 似乎是 2。但它无法用 Microsoft VC++ 编译。这种语法是 gcc 的扩展功能吗?如果是这样,如何在没有gcc扩展的情况下获得相同的效果,例如定义多个语句并使用宏返回一个值?
【问题讨论】:
-
你为什么这么问? Linux内核需要
gcc(或者一个非常兼容的编译器,比如最新版本的TinyCC或LLVM/Clang) 进行编译。