从c++的角度看C中的枚举

enumerations in C from a c++ perspective

本文关键字:枚举 c++      更新时间:2023-10-16

我是一个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,
    ...
};