【发布时间】:2014-06-19 18:17:36
【问题描述】:
C 标准要求所有指向 unions 的指针具有相同的表示和对齐要求。
它要求所有指向structs 的指针都相同。
因此我的问题是:
为什么标准不要求指向 unions 的指针与指向 structs 的指针具有相同的表示和对齐要求?(我非常愿意欣赏利用这一点的实现示例。)
还是我只是错过了相关的文字?
标准草案n1570(C11最终草案)的相关引用:
6.2.5 类型§ 28
指向
void的指针应具有与 指向字符类型的指针。48) 同样,指向合格或不合格版本的指针 兼容类型应具有相同的表示和对齐要求。 全部 指向结构类型的指针应具有相同的表示和对齐要求 作为彼此。所有指向联合类型的指针都应具有相同的表示形式和 对齐要求。指向其他类型的指针不必相同 表示或对齐要求。
【问题讨论】:
-
这难道不是您不能强制指向
int的指针与指向char的指针具有相同的表示和对齐要求的原因吗? -
@Amir:还有更多内容。看我的回答。
-
顺便说一句:给这个时间,也许有人想出了一个非常模糊的实现,一些被遗忘已久的委员会讨论或其他同样具有启发性/令人惊讶的东西。
-
@Deduplicator:当谈到 C89 时,委员会甚至没有明确提到它(“所有指向结构/联合类型的指针”)作为要求。这种“添加”的原因被认为是指向不完整类型的单独翻译单元的指针。在我的最新问题中,我提供了很多与此要求相关的信息。
标签: c pointers struct language-lawyer unions