【发布时间】:2018-10-08 19:12:19
【问题描述】:
6.2.5p28 提到
...所有指向结构类型的指针都应具有相同的 表示和对齐要求。所有指针 到联合类型应具有相同的表示和对齐方式 互相要求。指向其他类型的指针不需要有 相同的表示或对齐要求。
我相信正是这一段允许这样的代码:
TAG x;
void take(TAG x* X) { (void)X; }
int main()
{
TAG x *xp = 0;
take(xp);
}
当TAG 定义为扩展为struct 或union 关键字的宏时进行编译。
不过,它也是compiles (tcc, gcc, clang) when TAG is defined as a macro expanding to the enum keyword。
鉴于上述情况,enum 的代码是否替换为符合 C 的 TAG?为什么或为什么不?
【问题讨论】:
-
这不会编译。
-
请用实际的编译代码更新您的问题。当您使用
enum类型时,TAG到底是什么?TAG是 typedef 吗?宏? -
@Stargateur 确实如此:ideone.com/fICYcM
-
@PSkocik
#define TAG enum不在 OP 中 -
我不明白有什么令人惊讶的。
标签: c language-lawyer