从c++的角度看C中的枚举
enumerations in C from a c++ perspective
我是一个c++程序员,我很少需要处理GCC "C"。我目前正在将一些代码从c++转换为C,以便与GCC编译器一起使用。
在c++中,我将使用以下源代码。注意,我将为作用域使用一个类。c++源码class Card {
public:
enum Suit {
Diamonds, Hearts, Clubs, Spades
};
};
class Weapon {
public:
enum WeaponType {
Rocks, Clubs, Guns
};
};
int main () {
Suit a = Card::Clubs;
WeaponType b = Weapon::Clubs
}
在"C"中没有类别,也没有办法区分两个不同的"俱乐部"关键字。当尝试编译这个
时,我得到以下错误消息error C2365: 'Clubs': redefinition;之前的定义是"计数器"
C源
enum Suit {
Diamonds, Hearts, Clubs, Spades
};
enum WeaponType {
Rocks, Clubs, Guns
};
int main () {
Suit a = Clubs;
WeaponType b = Clubs
}
所以我的问题是
- 如何在同一文件中使用相同的关键字声明两个不同的枚举?
- 我如何添加范围的枚举,所以我可以分配不同的变量不同的枚举与相同的枚举名称?
就像以前那样做:
enum Suit {
ST_Diamonds, ST_Hearts, ST_Clubs, ST_Spades
};
enum WeaponType {
WT_Rocks, WT_Clubs, WT_Guns
};
int main () {
Suit a = ST_Clubs;
WeaponType b = WT_Clubs;
return 0;
}
在标准C中不能这样做。来自C参考手册: "作为枚举常量声明的标识符与变量函数和类型定义名称在同一个重载类中",因此枚举常量在给定范围内必须是唯一的。
由于C语言中缺少名称空间,您唯一的选择是添加前缀:
enum Weapon {
WeaponRocks,
WeaponSocks,
...
};
相关文章:
- 不带大括号的枚举形式
- 枚举环境变量的惯用C++14/C++17方法
- 类似枚举的计算常量
- 如何正确实现和访问运算符的各种自定义枚举器
- 错误:从"int"到枚举c++的转换无效
- C++中构造函数中的枚举
- 访问在 C++ 结构中声明的枚举变量
- 枚举类'classname'的多重定义
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- typedef 枚举和枚举类有什么区别?
- 为什么我的开关/机箱在使用枚举时默认?
- 标准::可选枚举的比较运算符
- C++两个源文件之间共享的枚举的静态实例
- 打印没有铸件的枚举可以在C++中吗?
- 枚举成员与静态 int 成员?
- C++:枚举:错误:应使用标识符而不是"}"
- 带有 c++ 的枚举(输入检查)
- 在 qml 中使用 Q_ENUM 和 Q_PROPERTY 作为枚举类
- 为什么 int 类型的枚举类值不能用作 int
- 在 C++ 中输出枚举类类型的向量元素