4

以下代码片段在使用 gcc 的 Mac OS X 上编译得很好,但在使用 lcc-win32 的 Windows 上编译失败:

typedef enum Foo Foo;

// Other code here

enum Foo { Bar = 1 };

并给出此错误:

未知枚举“Foo”

在我的特殊情况下,这不是问题。我只是将这些语句组合成:

typedef enum Foo { Bar = 1 } Foo;

但我想知道 LCC 是“更严格”(遵守某些标准)还是“更愚蠢”(编译器太愚蠢而无法处理这种情况)。

谢谢。

另外,请参阅我的其他 LCC 问题:LCC:初始化包含结构的结构?

4

1 回答 1

3

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

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

于 2011-09-01T17:25:13.747 回答