C枚举类型名称范围

bph*_*bph 4 c enums

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

enum flag_one {
    SUCCESS,
    FAIL
}

enum flag_two {
    SUCCESS,
    FAIL
}
Run Code Online (Sandbox Code Playgroud)

编译器不允许.因此,范围定义不是'witihin'吗?

是这样做的方法:

enum flag_one {
    FLAG_ONE_SUCCESS,
    FLAG_ONE_FAIL
}

enum flag_two {
    FLAG_TWO_SUCCESS,
    FLAG_TWO_FAIL
}
Run Code Online (Sandbox Code Playgroud)

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

dir*_*tly 6

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

不,这是不允许的.枚举器列表定义常量.你enum碰巧在同一范围内 - 文件范围.在同一范围内不能有两个具有相同名称的常量.

来自CX的草案:

6.7.2.2枚举说明符

语义

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

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

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

.

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

使用EXIT_SUCCESSEXIT_FAILURE定义stdlib.h.