LCC:Typedef 枚举的前向声明失败?

2024-06-07

以下代码片段在使用 gcc 的 Mac OS X 上编译得很好,但在使用 lcc-win32 的 Windows 上编译失败:

typedef enum Foo Foo;

// Other code here

enum Foo { Bar = 1 };

并给出这个错误:

未知枚举“Foo”

就我的具体情况而言,这不是问题。我简单地将这些语句合并为:

typedef enum Foo { Bar = 1 } Foo;

但我想知道 LCC 是否“更严格”(遵守某些标准)或“更愚蠢”(编译器太愚蠢,无法处理这种情况)。

Thanks.

另外,请参阅我的另一个 LCC 问题:LCC:初始化包含结构的结构? https://stackoverflow.com/questions/7273846/lcc-initializing-structs-containing-structs


枚举的前向声明是非标准的(它们违反了 C99 第 6.7.2.3 §3 节),如果您添加-pedantic标志(如果编写可移植代码,则应该使用该标志)。

这样做的原因是实现可以自由选择与以下类型不同的整数类型int用于表示枚举(参见 C99 第 6.7.2.2 §4 节)。然而,为了使其发挥作用,编译器必须先查看它需要表示的所有值,然后才能选择适当的类型。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LCC:Typedef 枚举的前向声明失败? 的相关文章

随机推荐