我是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”中没有课程,也没有办法区分两个不同的“俱乐部”关键词。尝试编译此
时收到以下错误消息错误C2365:'俱乐部':重新定义;以前的定义是 '枚举'
C来源
enum Suit {
Diamonds, Hearts, Clubs, Spades
};
enum WeaponType {
Rocks, Clubs, Guns
};
int main () {
Suit a = Clubs;
WeaponType b = Clubs
}
所以我的问题是
答案 0 :(得分:10)
就像过去一样:
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;
}
答案 1 :(得分:3)
这不能在标准C中完成。来自 CA参考手册:“声明为枚举常量的标识符与变量函数和typedef名称在同一个重载类中”,因此枚举常量必须是唯一的给定的范围。
答案 2 :(得分:2)
由于C中缺少名称空间,您唯一的选择是前缀:
enum Weapon {
WeaponRocks,
WeaponSocks,
...
};