以下代码片段在使用 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(使用前将#替换为@)