以下代码片段在Mac OS X上使用gcc编译得很好,但无法在Windows上使用lcc-win32进行编译:
typedef enum Foo Foo;
// Other code here
enum Foo { Bar = 1 };
并给出了这个错误:
未知枚举'Foo'
在我的特定情况下,这不是问题。我只是将这些陈述合并到:
typedef enum Foo { Bar = 1 } Foo;
但我想知道LCC是“更严格”(坚持一些标准)还是“更愚蠢”(编译器太愚蠢无法处理这种情况)。
感谢。
另外,请参阅我的其他LCC问题:LCC: Initializing Structs Containing Structs?
答案 0 :(得分:3)
枚举的前向声明是非标准的(它们违反了C99第6.7.2.3节§3),如果你添加-pedantic
标志(如果编写可移植代码你应该使用它),gcc也会发出警告。 / p>
这样做的原因是实现可以自由选择与int
不同的整数类型来表示枚举(参见C99第6.7.2.2节§4)。但是,要使其工作,编译器必须在选择适当的类型之前查看它需要表示的所有值。