#define _IO_MEMBER_TYPE (type, member) \
__typeof__ ( ((TYPE){}).MEMBER )
我已经在 glibc 的头文件“libiop.h”中读到了这一行,我对 (TYPE) 之后的大括号 {} 有点困惑。 ( (TYPE){} )
是什么意思?
最佳答案
宏表示特定结构成员的类型。该评论试图解释这一点:
/* Type of MEMBER in struct type TYPE. */
#define _IO_MEMBER_TYPE(TYPE, MEMBER) __typeof__ (((TYPE){}).MEMBER)
该宏仅用于此处:
/* Essentially ((TYPE *) THIS)->MEMBER, but avoiding the aliasing
violation in case THIS has a different pointer type. */
#define _IO_CAST_FIELD_ACCESS(THIS, TYPE, MEMBER) \
(*(_IO_MEMBER_TYPE (TYPE, MEMBER) *)(((char *) (THIS)) \
+ offsetof(TYPE, MEMBER)))
此构造使用各种 GCC 扩展来实现 C++ 样式的类继承。对于最近的 GCC 版本,直接编写的方式不再有效(或触发警告)。 (libio
代码及其实现的 C++ ABI 可以追溯到 90 年代的 GCC 2.95。)
这段代码非常糟糕,你真的不应该将它用作任何东西的模型。
关于c - 这在 C 中意味着什么((TYPE){})。该片段取自 : __typeof__ ( ((TYPE){}). MEMBER ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58779234/