c - 低碳代码 : Forward Declaration of Typedef'd Enum Failing?

标签 c lcc-win32

以下代码片段在使用 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/

相关文章:

c - 为什么作为函数参数时 type arrayp[] 与 type* arrayp 相同?

c - 为什么使用 "strlen30()"而不是 "strlen()"?

c - 通过 TCP 填充数据

c - perf_event_open 系统调用

c - 低碳代码 : Initializing Structs Containing Structs?

c - 从c中的其他文件打开文件路径

c - LCC-- 如何阻止调试器在应用程序启动时中断?

C: 不丢失空格的文件解析