C枚举类型名称范围

时间:2012-05-18 15:40:14

标签: c enums

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
}

稍微混淆,因为我喜欢使用枚举返回整数代码,因为它更具可读性/描述性但我已经开始得到名字冲突

2 个答案:

答案 0 :(得分:6)

  

因此范围定义不是'witihin'吗?

没有。这是不允许的。枚举器列表定义常量。您的enum恰好位于同一范围内 - 文件范围。您不能在同一范围内使用同名的两个常量

来自CX的草案:

  

6.7.2.2枚举说明符

     

<强>语义

     

3 枚举器列表中的标识符声明为类型为int和的常量   可能出现在允许的地方.127)[...]

此外,从脚注127(技术上非规范性和仅供参考):

  

127)因此,在同一范围内声明的枚举常量的标识符应全部不同   彼此以及在普通声明者中声明的其他标识符。

  

稍微混淆,因为我喜欢使用枚举返回整数代码[...]

使用EXIT_SUCCESS中定义的EXIT_FAILUREstdlib.h

答案 1 :(得分:3)

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

其他一些语言,如C ++ 11,添加了一种新的emums enum class,其值在封闭范围内不能直接显示。

然后你必须写flag_one::SUCCESSflag_two::SUCCESS来获取值,所以它与你的第二个选项没有太大区别。