LCC:Typedef 枚举的前向声明失败?

发布于 2024-12-02 15:55:48 字数 535 浏览 1 评论 0原文

以下代码片段在使用 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:初始化包含结构的结构?

The following code snippet compiles just fine on Mac OS X with gcc, but fails to compile on Windows with lcc-win32:

typedef enum Foo Foo;

// Other code here

enum Foo { Bar = 1 };

And gives this error:

unknown enumeration 'Foo'

In my particular case, this was not a problem. I simply combined the statements into:

typedef enum Foo { Bar = 1 } Foo;

But I'm wondering if LCC is being either "more strict" (adhering to some standard) or "more dumb" (the compiler is too dumb to handle this situation).

Thanks.

Also, please see my other LCC question: LCC: Initializing Structs Containing Structs?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

千柳 2024-12-09 15:55:48

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

原因是实现可以自由选择与 int 不同的整数类型来表示枚举(请参见 C99 第 6.7.2.2 §4 节)。然而,为了使其发挥作用,编译器必须先查看它需要表示的所有值,然后才能选择适当的类型。

Forward declarations of enumerations are non-standard (they violate C99 section 6.7.2.3 §3) and gcc will warn as well if you add the -pedantic flag (which you should use if writing portable code).

The reason for this is that implementations are free to choose an integer type different from int to use for representing the enumeration (see C99 section 6.7.2.2 §4). However, for that to work, the compiler has to see all values it needs to represent before an appropriate type can be chosen.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文