如何使用匿名结构声明变量

时间:2015-01-11 06:02:21

标签: c gcc

以下代码无法编译,我可以理解为什么,但我还是需要让它工作,最好是以符合标准的方式。

extern const struct {  int x; } a;

const struct { int x; } a = {1};

编译器说,“错误:'a'的冲突类型”,即使类型相同,即使它们可能是不同的匿名实例。

那么,如何向编译器解释这两种类型是否相同而不给结构命名或使用typedef?可以吗?

1 个答案:

答案 0 :(得分:2)

两个struct声明声明了两种不同的类型。

C标准非常清楚。 §6.7.2.3/ p5:“结构,联合或结构的每个声明” 不包含标记的枚举类型声明了一个不同的类型。“

所以在标准C中,你运气不好。

如果您准备使用gcc扩展名,则以下内容应该有效:

extern const struct {  int x; } a;

__typeof(a) a = {1};

如果您指定-std=gnu11之类的内容,那么您甚至可以省略两个下划线。