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

#include<stdio.h>enumcolor_type{RED,HAT,BLUE};intmain(){enumcolor_typecolor;color=HAT... #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';是否正确
展开
 我来答
_Moonshadow_
推荐于2017-11-24 · TA获得超过174个赞
知道小有建树答主
回答量:163
采纳率:0%
帮助的人:135万
展开全部
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也不检查。
finomy
2011-08-22
知道答主
回答量:11
采纳率:0%
帮助的人:15.5万
展开全部
貌似是需要强制类型转换
color=(color_type)'a';

结果为97
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
手机用户27002
2011-08-23 · TA获得超过232个赞
知道小有建树答主
回答量:660
采纳率:0%
帮助的人:397万
展开全部
Type
cmd=(Stop,Start);

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

if constA in cmd then...
我觉得应该是这样吧?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式