下面的代码片段在Mac上和gcc一起编译得很好,但是无法在Windows上用lcc 32编译:
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?
发布于 2011-09-01 17:25:13
枚举的前向声明是不标准的(它们违反了C99第6.7.2.3节第3节),如果添加-pedantic标志(如果编写可移植代码应该使用该标志),gcc也会发出警告。
原因是实现可以自由选择与int不同的整数类型来表示枚举(参见C99 6.7.2.2§4)。但是,要使其工作,编译器必须查看它需要表示的所有值,然后才能选择合适的类型。
https://stackoverflow.com/questions/7273535
复制相似问题