【发布时间】:2017-04-29 15:56:38
【问题描述】:
我正在尝试理解 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 文件中,这似乎工作得很好。我仍然无法弄清楚为什么我想浪费击键来使用政治正确的增强语法。 只是为了(据称)提高可读性?还是我遗漏了什么?
【问题讨论】:
-
使用标签然后使用该类型变量的假定优点是调试器通常能够为您提供该类型变量值的良好符号表示。
-
您不太可能想要声明枚举类型的变量或函数参数。当您使用错误的枚举标识符时,还可以帮助体面的编译器生成诊断。