这个问题源于一个老问题:
How to define an enumerated type (enum) in C?
该问题下面的答案相互矛盾。例如,one answer说“你需要使用typedef
”,another争论“你不需要typedef
”,下面的评论写道“你不能在C中使用enum策略{...};
——你可以而且应该不过用 C++ 来做。”这真的让我很困惑。更重要的是,OP 的代码在我所有的计算机上使用 clang 进行编译时甚至没有警告。
所以,我的问题是:在 C 中,使用枚举变量的最佳实践是什么?
最佳答案
C 有两个命名空间,一个用于变量和函数,另一个用于 enum
和 struct
等内容。我们将第二个命名空间称为 enum
命名空间。
当你声明一个enum
时,如enum Foo {Bar1, Bar2};
,Foo
,枚举常量将被放入枚举
命名空间。
这意味着只要您想使用该枚举,就必须使用 enum
前缀。打字很多不方便! (出于兴趣,这同样适用于struct
)。
幸运的是,C 允许您从 enum
命名空间借东西,因此它们也出现在变量和函数命名空间中。您可以使用 typedef
来做到这一点:
typedef enum Foo {Bar1, Bar2} Foo;
第一个 Foo
是它在 enum
命名空间中的名称,第二个 Foo
是它在函数和变量命名空间中的名称。
您不需要在 C++ 中执行此操作:除非您显式使用命名空间
,否则所有内容都位于全局命名空间中。
关于c - 在 C 中声明枚举变量的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35293736/