首页 > 解决方案 > 这在 C ((TYPE){}) 中意味着什么。该片段取自: __typeof__ ( ((TYPE){}).MEMBER )

问题描述

#define _IO_MEMBER_TYPE (type, member)       \
__typeof__ ( ((TYPE){}).MEMBER )

我已经在 glibc 的头文件“libiop.h”中阅读了这一行,我对 (TYPE) 之后的大括号 {} 有点困惑。是什么( (TYPE){} )意思?

标签: cmacrosglibctypeof

解决方案


宏表示特定结构成员的类型。该评论试图解释这一点:

/* 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。)

这段代码非常糟糕,你真的不应该将它用作任何东西的模型。


推荐阅读