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

时间:2011-09-01 16:42:03

标签: c lcc-win32

以下代码片段在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?

1 个答案:

答案 0 :(得分:3)

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

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

相关问题