gpt4 book ai didi

C 枚举标签 : When/Why to Use

转载 作者:太空狗 更新时间:2023-10-29 17:19:32 26 4
gpt4 key购买 nike

我正在尝试理解 C 枚举的完整语法。几十年来,我成功地使用了如下所示的简单枚举:

enum {
IDLE,
BUSY,
FAILED
};

但我看到 C 枚举的正式定义也允许像下面这样的标记和实例名称:

enum STATE {
IDLE,
BUSY,
FAILED
} appstate;

我什么时候以及为什么要使用"STATE""appstate"?对于我的生活,我想不出一个理由。

问题 84141887386805在这个问题上拐弯抹角,但没有启发。

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_IDLESTA_BUSY 而不是 IDLEBUSY ;有时我采用在 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 -gGCC ...),因为编译器可能会警告您(使用显式 enums) 在许多有用的情况下(例如 enum 上的 switch 缺少一些 case....)。

顺便说一句,C 编程实际上需要很多约定,您可能会明确表示它们(例如,在某些编码风格指南中)。

关于C 枚举标签 : When/Why to Use,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43697684/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com