【发布时间】:2015-01-26 13:51:44
【问题描述】:
我知道在 C 和 C++ 中,您都可以使用 enum 关键字枚举命名常量:
enum { RED, GREEN, BLUE };
如果您不为名称分配常量,编译器会以增量方式执行此操作,从 0 开始为每个新枚举。
现在让我们看看不同之处:
enum COLOR { RED, GREEN, BLUE };
在 C 中,COLOR 是所谓的“标签”。它不能直接用于变量或返回类型声明。相反,您必须在其前面加上 enum 关键字(或先为其创建一个 typedef):
enum COLOR someCFunction();
在 C++ 中,枚举名称是正确的类型名称,因此 enum 不是必需的。
但你仍然可以包含它,而且它在语法上似乎是正确且无害的:
enum COLOR someCppFunction();
我是否应该在 C++ 代码中的枚举名称之前保留 enum 关键字(“出于兼容性原因”)?
【问题讨论】:
-
我认为您应该删除 C 标签,因为该问题仅适用于 C++。在 C 中,您必须使用 typedef 来“摆脱”类型前面的枚举。
-
如果你不再使用 C,我不会这样做。
-
@DanielDaranas “兼容性原因”是个笑话。我会将多余的
enum视为错误,但我不想仅仅因为“感觉不好”而更改代码。 -
如果“出于兼容性原因”是个玩笑,那么问题实际上有点不同。 “出于兼容性原因”,我不会将枚举放在那里,但我会犹豫从 C 更改旧的、经过测试的代码,只是为了让它更漂亮。