这是什么 (( ))?

浏览gcc编译器源代码(gcc / c-family / c-pragma.c)时,我看到:

typedef struct GTY(()) align_stack { int alignment; tree id; struct align_stack * prev; } align_stack; 

并且不pipe在我身后有多lessC编程年代,这些位(())对我来说都是完全未知的。 有人能解释一下他们的意思吗? 谷歌似乎没有find它。

它们是GCC内部的“魔术”,即编译器实现本身的一部分。

看到这个页面 ,谈论他们的使用。 该macros用于标记垃圾收集目的的types。 也可以有参数,详见本页面 。

更新 ::正如Drew Dorman在评论中指出的那样,实际的双括号不是GNU实现的“内在性”的一部分; 当你想将所有的参数列表集中到一个被调用macros的参数中时,它们通常被使用。 这在包装例如printf()时候也是有用的。 看到这个问题,更多关于这个技术 。

一般来说,它是用macros来屏蔽逗号。 给定#define foo(a,b) ,macros调用foo(1,2,3)将是非法的。 使用额外的一对括号来说明哪个逗号被屏蔽: foo((1,2),3)foo(1,(2,3))

在这种情况下, GTY可以采用多个参数,以逗号分隔,但所有这些逗号都必须被屏蔽。 这就是inner ()包围所有参数的原因。