c - 在 C 中声明枚举变量的最佳方法是什么?

标签 c variables enums

这个问题源于一个老问题:

How to define an enumerated type (enum) in C?

该问题下面的答案相互矛盾。例如,one answer说“你需要使用typedef”,another争论“你不需要typedef”,下面的评论写道“你不能在C中使用enum策略{...};——你可以而且应该不过用 C++ 来做。”这真的让我很困惑。更重要的是,OP 的代码在我所有的计算机上使用 clang 进行编译时甚至没有警告。

所以,我的问题是:在 C 中,使用枚举变量的最佳实践是什么?

最佳答案

C 有两个命名空间,一个用于变量和函数,另一个用于 enumstruct 等内容。我们将第二个命名空间称为 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/

相关文章:

c - 增量运算符在 do while 循环中如何工作?

c - while 循环第二次运行时出现段错误

c -++*argv、*argv++、*(argv++) 和 *(++argv) 之间的区别

javascript - 创建全局变量并生成随机数并在 Javascript 中调用函数时更新变量

c# - 如何改进 C# 枚举

c++ - 为什么需要在 FormatMessage 中转换 lpBuffer (LPTSTR) 参数?

javascript - 如何将jqPlot值写入变量?

java - 为什么 Java 编译器会提示局部变量没有在这里初始化?

c++ - C++ 中的 Typedef 枚举

c# - 使用 CodeDom 生成具有值和名称的枚举