GCC告诉我,不能对单独的枚举类型值使用相同的名称,例如
enum flag_one {
SUCCESS,
FAIL
}
enum flag_two {
SUCCESS,
FAIL
}
编译器不允许。因此,范围定义不是'witihin'吗?
方法是做什么的:
enum flag_one {
FLAG_ONE_SUCCESS,
FLAG_ONE_FAIL
}
enum flag_two {
FLAG_TWO_SUCCESS,
FLAG_TWO_FAIL
}
稍微混淆,因为我喜欢使用枚举返回整数代码,因为它更具可读性/描述性但我已经开始得到名字冲突
答案 0 :(得分:6)
因此范围定义不是'witihin'吗?
没有。这是不允许的。枚举器列表定义常量。您的enum
恰好位于同一范围内 - 文件范围。您不能在同一范围内使用同名的两个常量。
来自CX的草案:
6.7.2.2枚举说明符
<强>语义强>
3 枚举器列表中的标识符声明为类型为int和的常量 可能出现在允许的地方.127)[...]
此外,从脚注127(技术上非规范性和仅供参考):
127)因此,在同一范围内声明的枚举常量的标识符应全部不同 彼此以及在普通声明者中声明的其他标识符。
稍微混淆,因为我喜欢使用枚举返回整数代码[...]
使用EXIT_SUCCESS
中定义的EXIT_FAILURE
和stdlib.h
。
答案 1 :(得分:3)
枚举值在枚举类型的范围内可见。这意味着他们必须在该范围内独一无二。
其他一些语言,如C ++ 11,添加了一种新的emums enum class
,其值在封闭范围内不能直接显示。
然后你必须写flag_one::SUCCESS
和flag_two::SUCCESS
来获取值,所以它与你的第二个选项没有太大区别。