以下代码片段在使用 gcc 的 Mac OS X 上编译得很好,但在使用 lcc-win32 的 Windows 上编译失败:
typedef enum Foo Foo;
// Other code here
enum Foo { Bar = 1 };
并给出这个错误:
unknown enumeration 'Foo'
在我的特殊情况下,这不是问题。我只是将语句合并为:
typedef enum Foo { Bar = 1 } Foo;
但我想知道 LCC 是“更严格”(遵守某些标准)还是“更笨”(编译器太笨,无法处理这种情况)。
谢谢。
此外,请参阅我的其他 LCC 问题:LCC: Initializing Structs Containing Structs?
最佳答案
枚举的前向声明是非标准的(它们违反了 C99 第 6.7.2.3 节第 3 节)并且如果您添加 -pedantic
标志(如果编写可移植的,您应该使用它),gcc 也会发出警告代码)。
这样做的原因是实现可以自由选择不同于 int
的整数类型来表示枚举(参见 C99 第 6.7.2.2 节 §4)。但是,要使其正常工作,编译器必须先查看它需要表示的所有值,然后才能选择合适的类型。
关于c - 低碳代码 : Forward Declaration of Typedef'd Enum Failing?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7273535/