【发布时间】:2015-01-11 06:02:21
【问题描述】:
以下代码无法编译,我可以理解原因,但无论如何我都需要让它工作,最好以符合标准的方式。
extern const struct { int x; } a;
const struct { int x; } a = {1};
编译器说,“错误:‘a’的类型冲突”,即使类型相同,即使它们可能是不同的匿名实例。
那么,如何在不给结构命名或不使用 typedef 的情况下向编译器解释这两种类型是相同的?能做到吗?
【问题讨论】:
-
是一个常量,需要在声明时初始化
-
不是真的,你可以做“extern const struct x1 { int x; } b;const struct x1 b = {1};”并且它有效,问题中的 sn-p 不起作用,因为编译器确信这两个结构是不同的。
-
类型结构相同但类型不同。
-
有没有办法让编译器接受两者为同一类型?
-
我不认为很难检测到这一点,问题是,这种行为是标准要求的吗?还是只是编译器的阴谋?如果是前者,我会接受,如果是后者,我会唠叨抱怨。