c - 这在 C 中意味着什么((TYPE){})。该片段取自 : __typeof__ ( ((TYPE){}). MEMBER )

标签 c macros glibc typeof

#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/

相关文章:

c - 在 C 中查找打包结构大小的可移植方法

c - open()系统调用等待

c++ - BOOST_PREVENT_MACRO_SUBSTITUTION 应该如何工作?

c - 在 C 中将零值分配给随机类型使用宏?

c - glibc(GNU C 库)是否提供了一种获取已分配内存块大小的方法?

c - 错误已弃用

c - 我在哪里可以找到在 c 标准头文件(如 stdlib.h)中声明的函数的定义?

c - 下面的c时间戳代码有什么错误?

c - 如何判断宏函数是否定义?

C:默认之前是空箱,没用吗?