4

GCC 告诉我你不能对单独的枚举类型值使用相同的名称,例如

enum flag_one {
    SUCCESS,
    FAIL
}

enum flag_two {
    SUCCESS,
    FAIL
}

编译器不允许。那么范围界定不是“在”枚举定义中吗?

是做类似的事情的方法:

enum flag_one {
    FLAG_ONE_SUCCESS,
    FLAG_ONE_FAIL
}

enum flag_two {
    FLAG_TWO_SUCCESS,
    FLAG_TWO_FAIL
}

有点困惑,因为我喜欢使用枚举作为返回整数代码,因为它更具可读性/描述性,但我已经开始遇到名称冲突

4

2 回答 2

6

那么范围界定不是“在”枚举定义中吗?

不,这是不允许的。枚举器列表定义常量。你enum的 s 恰好在同一个范围内——文件范围在同一个范围内不能有两个同名的常量。

来自 CX 的草案:

6.7.2.2 枚举说明符

语义

3枚举器列表中的标识符被声明为具有 int 类型的常量,并且可以出现在任何允许的地方。127) [...]

此外,来自脚注 127(这在技术上是非规范性的,仅供参考):

127) 因此,在同一范围内声明的枚举常量的标识符应彼此不同,并且与在普通声明符中声明的其他标识符不同。

.

有点困惑,因为我喜欢使用枚举来返回整数代码 [...]

使用EXIT_SUCCESSEXIT_FAILURE定义在stdlib.h.

于 2012-05-18T15:51:57.437 回答
3

枚举值在枚举类型的范围内可见。这意味着它们必须在该范围内是独一无二的。

其他一些语言,如 C++11,添加了一种新的 emum enum class,其中值在封闭范围内不直接可见。

然后您必须编写flag_one::SUCCESSflag_two::SUCCESS获取值,因此它与您的第二个选项没有太大区别。

于 2012-05-18T15:52:46.490 回答