关于C中枚举的使用:是否可以更改枚举成员的值?
因此,这似乎是一个愚蠢的问题,但我想知道是否有任何方法可以更改C中枚举成员的值 例如,假设我有:关于C中枚举的使用:是否可以更改枚举成员的值?,c,enums,C,Enums,因此,这似乎是一个愚蠢的问题,但我想知道是否有任何方法可以更改C中枚举成员的值 例如,假设我有: enum yourcolor{red = 43, blue = 54, green = 89}; enum yourcolor blue-green = red*blue*green; 有没有办法在以后的代码中更改红色、蓝色和绿色的值 我的想法是: yourcolor.red = 56; etc... 我知道你应该用一个struct来做这样的事情,但这只是我今天想的,我找不到答案 任何帮助都将
enum yourcolor{red = 43, blue = 54, green = 89};
enum yourcolor blue-green = red*blue*green;
有没有办法在以后的代码中更改红色、蓝色和绿色的值
我的想法是:
yourcolor.red = 56; etc...
我知道你应该用一个struct来做这样的事情,但这只是我今天想的,我找不到答案
任何帮助都将不胜感激。否。
枚举中的标识符声明为常量
来自(我的):
枚举器列表中的标识符被声明为常量
具有int类型,并可在允许的任何地方出现
注意,在同一节后面(斜体):
每个枚举类型应与整数类型兼容。这个
类型选择由实现定义,但应能够
表示枚举的所有成员的值
更一般地说,我会质疑这样一个特性的动机。根据定义,枚举是某个集合的所有成员的完整列表,其值在正常情况下可能不应更改。否。枚举中的标识符声明为常量
来自(我的):
枚举器列表中的标识符被声明为常量
具有int类型,并可在允许的任何地方出现
注意,在同一节后面(斜体):
每个枚举类型应与整数类型兼容。这个
类型选择由实现定义,但应能够
表示枚举的所有成员的值
更一般地说,我会质疑这样一个特性的动机。根据定义,枚举是某个集合的所有成员的完整列表,其值在正常情况下可能不应更改。不,这是不可能的。嗯,它可以在不同的翻译单元中工作,尽管这可能不是你想要的
但您可以使用变量:
typedef int color;
color red = 43;
color blue = 54;
color green = 89;
这些可以更改。不,这是不可能的。嗯,它可以在不同的翻译单元中工作,尽管这可能不是你想要的
但您可以使用变量:
typedef int color;
color red = 43;
color blue = 54;
color green = 89;
这些都是可以改变的。我想这不太可能。枚举值很可能在编译时被常量静态替换,因此分配给它们的行为将是古怪的(最坏的情况),或者作为错误被拒绝(最好的情况)。我认为这不太可能。枚举值很可能在编译时被常量静态替换,因此分配给它们的行为将是古怪的(最坏的情况),或者作为错误被拒绝(最好的情况)。这似乎没有意义。枚举实际上是常量,我假设它们被硬编码到机器指令中
这意味着程序无法知道它们何时更改。如果你在一个非线性的程序中改变了它,当你跳回时会发生什么?像在循环或goto语句中一样?这似乎没有意义。枚举实际上是常量,我假设它们被硬编码到机器指令中
这意味着程序无法知道它们何时更改。如果你在一个非线性的程序中改变了它,当你跳回时会发生什么?就像在循环或goto语句中一样?简短的回答是“否”--定义枚举常量后,不能更改其值
从语义上讲,这样做没有任何意义。使用枚举类型背后的全部要点是抽象出底层表示——您关心的是颜色是红色,而不是43或56或其他颜色。换句话说,如果red
是43或56很重要,那么就不应该使用枚举
当您创建枚举类型的对象时,您基本上是说该对象只能接受其中一个枚举值;它可以是红色
或蓝色
或绿色
。如果要表示二级颜色,则需要为这些二级颜色定义枚举常量。您可以根据包含原色的表达式定义这些二级。以下是许多可能的编码之一:
enum color {black = 0x00, // binary 0000
red = 0x01, // binary 0001
blue = 0x02, // binary 0010
green = 0x04, // binary 0100
magenta = red | blue, // binary 0011
cyan = blue | green, // binary 0110
yellow = red | green, // binary 0101
white = red | blue | green // binary 0111
};
显示的编码很方便;它们显示了如何从原色构建二次颜色。他们也是完全武断的;您可以将类型定义为
enum color {black, red, blue, green, magenta, cyan, yellow, white};
而且根本不用担心基础值(分别是0、1、2、3、4、5、6和7)
通过创建此类型,您意味着枚举颜色类型的对象应仅具有以下值之一:黑色
、红色
、蓝色
、绿色
、洋红
、青色
、黄色
、或白色
(与基础整数值无关)
当然,C对此并不严格:枚举类型的对象可以包含任意整数值,即使该值没有出现在枚举常量列表中。但这样做,您打破了该类型所隐含的概念模型。简短的回答是“否”“--定义枚举常量后,不能更改其值
从语义上讲,这样做没有任何意义。使用枚举类型背后的全部要点是抽象出底层表示——您关心的是颜色是红色,而不是43或56或其他颜色。换句话说,如果red
是43或56很重要,那么就不应该使用枚举
当您创建枚举类型的对象时,您基本上是说该对象只能接受其中一个枚举值;它可以是