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节)。 但是,要使其工作,编译器必须在选择适当的类型之前查看它需要表示的所有值。