关于C语言中枚举类型 枚举变量可以赋值为不在范围内的值吗?如下边的程序:
答案:3 悬赏:70 手机版
解决时间 2021-11-26 13:25
- 提问者网友:缘字诀
- 2021-11-26 04:13
关于C语言中枚举类型 枚举变量可以赋值为不在范围内的值吗?如下边的程序:
最佳答案
- 五星知识达人网友:玩世
- 2021-11-26 04:56
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也不检查。
的变量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楼网友:独钓一江月
- 2021-11-26 07:46
Type
cmd=(Stop,Start);
var
cmdtype: cmd;
begin
cmdtype := Stop;
end;
if constA in cmd then...
我觉得应该是这样吧?
cmd=(Stop,Start);
var
cmdtype: cmd;
begin
cmdtype := Stop;
end;
if constA in cmd then...
我觉得应该是这样吧?
- 2楼网友:十鸦
- 2021-11-26 06:11
貌似是需要强制类型转换
color=(color_type)'a';
结果为97
color=(color_type)'a';
结果为97
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯