以下代码无法编译,我可以理解为什么,但我还是需要让它工作,最好是以符合标准的方式。
extern const struct { int x; } a;
const struct { int x; } a = {1};
编译器说,“错误:'a'的冲突类型”,即使类型相同,即使它们可能是不同的匿名实例。
那么,如何向编译器解释这两种类型是否相同而不给结构命名或使用typedef?可以吗?
答案 0 :(得分:2)
两个struct
声明声明了两种不同的类型。
C标准非常清楚。 §6.7.2.3/ p5:“结构,联合或结构的每个声明” 不包含标记的枚举类型声明了一个不同的类型。“
所以在标准C中,你运气不好。
如果您准备使用gcc扩展名,则以下内容应该有效:
extern const struct { int x; } a;
__typeof(a) a = {1};
如果您指定-std=gnu11
之类的内容,那么您甚至可以省略两个下划线。