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

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 的内容,那么您甚至可以省略两个下划线。