如何使用匿名结构声明变量
how to declare a variable using an anonymous struct
以下代码无法编译,我能理解为什么,但无论如何我都需要让它工作,最好是以符合标准的方式。
extern const struct { int x; } a;
const struct { int x; } a = {1};
编译器说,"error: conflicting types for ‘a’",即使类型相同,即使它们可能是不同的匿名实例。
那么,如何在不给结构命名或不使用 typedef 的情况下向编译器解释这两种类型是相同的?可以吗?
两个 struct
声明声明了两个不同的类型。
C标准很明确。 §6.7.2.3/p5:“结构、联合或
不包含标记的枚举类型声明了不同的类型。"
所以在标准 C 中,你运气不好。
如果您准备使用 gcc 扩展,以下应该有效:
extern const struct { int x; } a;
__typeof(a) a = {1};
如果您指定类似 -std=gnu11
的内容,那么您甚至可以省略两个下划线。
以下代码无法编译,我能理解为什么,但无论如何我都需要让它工作,最好是以符合标准的方式。
extern const struct { int x; } a;
const struct { int x; } a = {1};
编译器说,"error: conflicting types for ‘a’",即使类型相同,即使它们可能是不同的匿名实例。
那么,如何在不给结构命名或不使用 typedef 的情况下向编译器解释这两种类型是相同的?可以吗?
两个 struct
声明声明了两个不同的类型。
C标准很明确。 §6.7.2.3/p5:“结构、联合或 不包含标记的枚举类型声明了不同的类型。"
所以在标准 C 中,你运气不好。
如果您准备使用 gcc 扩展,以下应该有效:
extern const struct { int x; } a;
__typeof(a) a = {1};
如果您指定类似 -std=gnu11
的内容,那么您甚至可以省略两个下划线。