c/c++语言开发共享C / C ++创建一个带负值的枚举,无需编号

例如在C / C ++中,我会得到代码:

typedef enum fruits{ apple, banana, lemon, orange } fruit_t; 

这相当于:

 typedef enum fruits{ apple = 0, banana = 1, lemon = 2, orange = 3 } fruit_t; 

但是,我希望这些值是负数,因此它们不会与其他任何内容发生冲突。 我可以这样做:

 typedef enum fruits{ apple = -1, banana = -2, lemon = -3, orange = -4 } fruit_t; 

但是如果我想添加另一个水果,我必须分配另一个值,如果我把它放在其中,我必须重新编号其中的大部分。 有更简单的方法吗?

    首先从INT_MIN开始,如下所示:

     #include  enum fruits { orange = INT_MIN, lemon, ... } 

    根据C11标准INT_MININT_MIN 整数类型的大小 ”和/或“ 附件E / 1 ”至少为-32767

    INT_MIN通过包含定义。

    C中,您只需要对前一个条目进行编号,后续条目将是前一个条目+1 ,这在C99草案标准部分6.7.2.2 枚举说明符中有所说明( 强调我的 ):

    […]带有=的枚举器将其枚举常量定义为常量表达式的值。 如果第一个枚举数没有=,则其枚举常量的值为0. 每个后续枚举数为no =将其枚举常量定义为通过将1加上前一个枚举常量值得到的常量表达式的值。[.. ]

    并且C ++草案标准第7.2枚举声明2段中的措辞类似。

    所以只需做类似以下的事情:

     #define MIN -4 typedef enum fruits{ orange = MIN, lemon, banana, apple, } fruit_t; 

    在顶部添加新闻。 你仍然需要编号最顶层。

     enum fruit { orange = -4, lemon, banana, apple, }; 

    首先,没有“C / C ++”这样的东西,它们是两种不同的语言。 您不能将C视为C ++的子集; 某些合法的C代码不会编译为C ++程序。

    如果您可以使用C ++ 11,我建议您使用enum class ,它为您提供强类型枚举

     enum class Traffic {red , yellow, green}; Traffic t = Traffic::red; if ( t == Traffic::red ) // to test the value of an enum 

    这样就可以保证不会发生冲突,因为编译器不会让你与整数或不同枚举类型的变量进行任何比较。

    您只能与同一枚举类型的变量进行比较,或者使用示例中的二进制范围解析运算符。

    这个enum class另一个优点是你可以设置你的枚举的大小。 您可以使用任何有符号或无符号整数类型,如下所示:

     enum class Traffic : char { red, yellow, green } 

    如果未指定类型,则假定为默认int

    请注意,您需要一个支持C ++ 11的编译器。

    我想你无论如何都可以订购它。

    如果您没有给出任何值,则下一个enum将获得其先前值的+1 。 如果即使拳头enum没有任何价值,那么它将从0开始。

    但好的做法是让它按正确的顺序排列。

    将错误声明为通常的枚举并使用它的负值也很常见,例如:

    需要了解更多c/c++开发分享C / C ++创建一个带负值的枚举,无需编号,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!

     typedef enum fruits_e { APPLE=1, BANANA, LEMON, ORANGE } fruit_t; fruit_t eat_fastfood(void) { if (! me->healthy()) return -APPLE; } 

      以上就是c/c++开发分享C / C ++创建一个带负值的枚举,无需编号相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/979137.html

      (0)
      上一篇 2021年12月12日
      下一篇 2021年12月12日

      精彩推荐