浏览gcc编译器源代码(gcc/c-family/c-pragma.c)时,我看到:
typedef struct GTY(()) align_stack {
int alignment;
tree id;
struct align_stack * prev;
} align_stack;
Run Code Online (Sandbox Code Playgroud)
而且无论我有多少C编程年,我(())都知道这些:我还完全不知道.有人可以解释一下他们的意思吗?谷歌似乎没有找到它.
unw*_*ind 81
它们是GCC内部的"魔力",即编译器实现本身的一部分.
请参阅此页面,了解它们的用途.该宏用于标记垃圾收集目的的类型.也可以有参数,请参阅此页面了解详情.
更新 ::正如Drew Dorman在评论中指出的那样,实际的双括号不是GNU实现的"内部性"的一部分; 当你想要将整个参数列表收集到被调用宏的单个参数中时,它们通常被使用.这有时在包装时也很有用printf().有关此技术的更多信息,请参阅此问题.
MSa*_*ers 45
通常,它与宏一起使用来屏蔽逗号.鉴于#define foo(a,b),宏调用foo(1,2,3)是非法的.使用额外的一对括号可以澄清哪个逗号被屏蔽:foo((1,2),3)对比foo(1,(2,3)).
在这种情况下,GTY可以使用逗号分隔的多个参数,但必须屏蔽所有这些逗号.这就是为什么内在()环绕所有论点.