【发布时间】:2020-09-12 23:20:21
【问题描述】:
我对枚举类型变量和 int 类型变量在 C 中的工作方式有何不同感到困惑。
我听说在 C++ 中枚举类型和整数类型之间可能存在转换错误,但 C 没有。
那么如果C中的整数变量和枚举类型变量没有区别, 我可以只声明枚举名称并使用它们而不声明任何枚举类型变量吗,例如,
...
enum { WIN, LOSE, DRAW };
int main() {
int result;
result = play_game(...);
if (result == WIN) { ... }
else if (result == LOSE) { ... }
...
}
int play_game(...) {
...
if (...) return WIN;
else if (...) return LOSE;
else return DRAW;
...
}
如上。 (只是为了提高可读性,而不是使用无意义的数字;0、1、2、10、-1 等)
实际上,我无法理解声明特定枚举类型变量的含义,如下所示。
enum GameResult { WIN, LOSE, DRAW } result;
这是否也与代码可读性有关?
我的意思是,将 result 声明为 int 和枚举类型变量之间有什么区别?
【问题讨论】:
-
enum 是一组常量的容器,它会自动为枚举中的每个常量分配下一个 +1 值,在您的示例中,您没有为枚举命名,它的作用类似于命名空间并将常量分组到指定的名称下。使用枚举的主要好处是可以检查有效值。
-
为枚举声明类型名称允许您定义该类型的函数参数和变量,应该只采用枚举中定义的值之一。您当然可以在代码中使用未命名的枚举值,但是如果您有多个不同的未命名枚举,则无法使用枚举类型定义变量或函数参数。