关于C语言中枚举类型 枚举变量可以赋值为不在范围内的值吗?如下边的程序:

#include <stdio.h>

enum color_type {RED,HAT,BLUE};
int main()
{
enum color_type color;
color=HAT;
color='a';
printf("%d\n",color);
return 0;
}
此程序我用我的VC6.O编译错误 ,但千锋培训上边演示的却可以通过 网址为http://v.youku.com/v_show/id_XMjQ1NDA1NjU2.html (大该在13分钟的时候 讲的) 请高手帮我分析下怎么回事
就是说我已经定义了枚举元素只有以下三个 enum color_type {RED,HAT,BLUE};
然后再执行这个语句 color='a';是否正确

color_type类型是对一个变量取值范围的限定,而花括号内是它的取值范围,即color_type 类型
的变量color 只能取值为花括号内的任何一个值,如果赋给该类型变量的值不在列表中,则会报错。
我看了一下你提供的教学视频,他是在ubuntu系统下编译的,linux的编译器肯定有所不同。据我所知,变量值超出范围在microsoft的编译器这边都会报错。

上面所说的强制转换:一个原本不是color_type类型的变量被你硬生生转换成该类型,没有实际意义。字符a被你转换成color_type类型,当然可以赋值啦。追问

谢谢您 但还有一点不太明白 就是既然把‘a’强制转换成了 color_type类型,那转换后的值不是就得在{0,1,2}之间才行吗? 得到字符a的ASCII码97也可以吗?
这是不是不符合枚举的初衷了啊?

追答

枚举的本质就是int,只不过限定了一个范围。
强制转换时将其转换为int,而不会检查其是否超出范围。

检查神马的都是编译器的工作。那个视频里的gcc貌似就不检查范围,而我们用的VC++6.0是检查的。不过强制转换的时候VC++6.0也不检查。

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-08-22
貌似是需要强制类型转换
color=(color_type)'a';

结果为97
第2个回答  2011-08-23
Type
cmd=(Stop,Start);

var
cmdtype: cmd;
begin
cmdtype := Stop;
end;

if constA in cmd then...
我觉得应该是这样吧?

关于C语言中枚举类型 枚举变量可以赋值为不在范围内的值吗?如下边的...
上面所说的强制转换:一个原本不是color_type类型的变量被你硬生生转换成该类型,没有实际意义。字符a被你转换成color_type类型,当然可以赋值啦。

c语言中enum类型的用法!
1. 枚举值是常量,不是变量。不能在程序中用赋值语句再对它赋值。例如对枚举weekday的元素再作以下赋值:sun=5; mon=2; sun=mon;都是错误的。2. 枚举元素本身由系统定义了一个表示序号的数值,从0开始顺序定义为0,1,2…。如在weekday中,sun值为0,mon值为1,…,sat值为6。【例】main(...

C语言中的枚举类型
它们不是变量,不能进行赋值。例如 sun = 7; mon = 1; 是错误的。 2、枚举元素作为常量,是有值的。C语言编译按定义时的顺序使它们的值为0、1、2……也可以在定义时,指定枚举元素的值,例如:3、枚举值可以用来作判断比较。例如:4、一个证书不能直接赋值给一个枚举变量。例如 workday=1...

c语言枚举类型枚举常量枚举常量到底可不可以赋值
但这个可不是赋值。另外 如果是常变量, 理论上不可以赋值, 但C语言对此约束不大, 可以通过指针转换方式,强制赋值, 实际编程中不推荐这样做。

c语言枚举类型enum用法
enum typeName { valueName1, valueName2, valueName3, ... };typeName是枚举类型的名字,花括号里面的元素(枚举成员)是常量而不是变量,这个一定要搞清楚,因为枚举成员的是常量,所以不能对它们赋值,只能将它们的值赋给其他的变量。枚举是 C 语言中的一种基本数据类型,它可以让数据更简洁,更...

C语言丨关键字enum用法详解,看这篇就够了
详解C语言关键字enum的使用枚举(enum)是C语言中的一种重要数据类型,它简化了整数常量的命名,提高代码可读性。它是一种预处理指令#define的替代,但与宏不同,枚举在编译阶段将标识符转换为指定的整数值。枚举的定义格式如下:enum typeName { valueName1, valueName2, ... };typeName是枚举类型名...

enum是什么类型
ENUM是计算机编程语言中的一种数据类型;枚举类型:在实际问题中,有些变量的取值被限定在一个有限的范围内。例如,一个星期内只有七天,一年只有十二个月,一个班每周有六门课程等等。 如果把这些量说明为整型,字符型或其它类型显然是不妥当的。为此,C语言提供了一种称为“枚举”的类型。

C语言 enum(枚举)
在C语言中,枚举通常被视为int或unsigned int类型,不支持直接遍历。但可以通过条件处理实现部分枚举遍历。在switch语句中,枚举可方便地对应不同的情况:在switch中使用:enum color { red=1, green, blue }; ...总之,枚举是C语言中提升代码可读性和组织性的有力工具。要深入学习编程,欢迎加入玛可...

C语言中的枚举类型
枚举元素在C语言中被视为常量,因此你不能给它们赋值,如 `sun = 7;` 是错误的。每个枚举元素都有自己的值,这个值从0开始自动递增,除非你在声明时指定了值。枚举值可以用于比较和判断,例如:```c if (day == mon) { \/\/ ...} ```然而,你不能直接将一个整数赋值给枚举变量,例如 `...

enum在c语言中怎么用 (枚举型)
定义枚举类型enum YOURENUMTYPE{ID1,\/\/如果不额外指定则第一个标识等于整数0,后续依次加1ID2,ID3=7,IDn\/\/最后一个标识符后面没有逗号};\/\/注意一定要加上这个分号定义枚举变量enum YOURENUMTYPE varname;给枚举变量赋值 varname = IDx;举个完整的例子enum FRUIT{APPLE,PEAR,ORANGE,PEACH,GRAPE,...

相似回答