最新的枚举值是否总是高于第一个枚举值?

Ash*_*bay 1 c enums enumeration objective-c

我有一个关于枚举的问题:当我创建一个枚举时,最新值是否总是高于枚举的第一个值?

也许一个例子有助于理解我的意思:

  • 想象一下,我正在开发一款RPG游戏,其中有武器.每种武器都有一种类型:

    typedef enum
    {
      WoodenSword,
      IronSword,
      SteelSword,
      GoldenSword
    }WeaponType;
    
    Run Code Online (Sandbox Code Playgroud)

现在我想检查武器之间的力量差异(假设WoodenSword是最弱的武器而GoldenSword是最强的武器).有可能去检查一个简单的武器的力量:

    WeaponType type = GoldenSword;
    if(type > WoodenSword)
    {
      //Do something
    }
Run Code Online (Sandbox Code Playgroud)

换句话说,我不想要这个,但是enum值可能是这样的(如果你不强制该值):

    typedef enum
    {
      WoodenSword, //-> equals 40
      IronSword, //-> equals 0
      SteelSword, //-> equals 42
      GoldenSword //-> equals 5
    }WeaponType;
Run Code Online (Sandbox Code Playgroud)

或者默认情况下会这样:

    typedef enum
    {
      WoodenSword, //-> equals 0
      IronSword, //-> equals 1
      SteelSword, //-> equals 2
      GoldenSword //-> equals 3
    }WeaponType;
Run Code Online (Sandbox Code Playgroud)

希望足够清楚.如果我不够精确,请随时告诉我.

谢谢.

hmj*_*mjd 10

对于C:

从C99标准部分6.7.2.2枚举说明符:

枚举器列表中的标识符声明为具有int类型的常量,并且可以出现在允许的地方.98)带有=的枚举数将其枚举常量定义为常量表达式的值.如果第一个枚举数没有=,则其枚举常量的值为0. 每个后续的带有no的枚举数将其枚举常量定义为通过将1加上前一个枚举常量的值而获得的常量表达式的值.(枚举器与=的使用可能会产生枚举常量,其值与同一枚举中的其他值重复.)枚举的枚举数也称为其成员.

因此,如果enum未明确设置枚举数的值,则保证其大于前一个值.