- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试理解 C 枚举的完整语法。几十年来,我成功地使用了如下所示的简单枚举:
enum {
IDLE,
BUSY,
FAILED
};
但我看到 C 枚举的正式定义也允许像下面这样的标记和实例名称:
enum STATE {
IDLE,
BUSY,
FAILED
} appstate;
我什么时候以及为什么要使用"STATE" 或"appstate"?对于我的生活,我想不出一个理由。
问题 8414188和 7386805在这个问题上拐弯抹角,但没有启发。
2019 年 5 月 4 日更新
我根据以下答案对我的问题进行了一些澄清:
1. 我确实使用前缀,例如STATE_IDLE,但这些在我上面的简单例子中被删减了。2. 我检查了几个使用枚举的代码示例。这些证实了我对增强语法的理解,但没有解释原因。
3. 我经常将我的匿名枚举放在一个项目范围的 .h 文件中,这似乎工作得很好。我仍然不明白为什么我想浪费击键来使用政治上正确的增强语法。 它只是为了(据称)提高可读性吗?还是我遗漏了什么?
最佳答案
您想编码(这实际上很常见,例如 Linux kernel's kernel/audit.h
中的 enum audit_state
)
enum STATE {
IDLE,
BUSY,
FAILED
};
这样的 enum
定义很可能(按照惯例)进入某个公共(public)头文件。您可能会采用惯例为各种枚举值共享一个公共(public)前缀,因此请编写 STA_IDLE
或 STA_BUSY
而不是 IDLE
和 BUSY
;有时我采用在 enum
标签后缀的约定,这里是 STATE
,带有 _en
所以我宁愿编码 enum STATE_en { STA_IDLE, STA_BUSY,
... };
如果您想使用(特别是出于可读性目的)enum STATE
作为例如的类型一些变量或形式:
enum STATE global_state; // a global variable
void print_state(enum STATE); // a formal
或在 typedef 中:
typedef enum STATE stateT;
等....
您的 appstate
只是一个 enum STATE
类型的变量(就像我的 global_state
一样)。
我建议研究一些现有的源代码 free software在 C 中(它不必像 Linux 内核一样复杂;您可以在 github 上找到许多示例)。
编译时不要忘记启用所有警告(例如 gcc -Wall -Wextra -g
和 GCC ...),因为编译器可能会警告您(使用显式 enum
s) 在许多有用的情况下(例如 enum
上的 switch
缺少一些 case
....)。
顺便说一句,C 编程实际上需要很多约定,您可能会明确表示它们(例如,在某些编码风格指南中)。
关于C 枚举标签 : When/Why to Use,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43697684/
我是一名优秀的程序员,十分优秀!