LCC:Typedef’d Enum的前向声明失败?

以下代码片段在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:初始化含有结构的结构?

枚举的前向声明是非标准的(它们违反了C99第6.7.2.3节第3节),如果添加-pedantic标志(在编写可移植代码时应该使用),gcc也会发出警告。

这样做的原因是实现可以自由选择与int不同的整数类型来表示枚举(参见C99第6.7.2.2节第4节)。 但是,要使其工作,编译器必须在选择适当的类型之前查看它需要表示的所有值。