把整型赋给一个枚举类型变量时必须强制类型转换吗?

daibao9922 2004-12-06 10:37:26
我在许多C书籍中都看到"把整型赋给一个枚举类型变量时必须强制类型转换"这句话(包括谭浩强强的那本),但我在TurboC2.0中输入如下程序:
main(){
enum letter{a,b,c,d}zz;
zz=0; /* this line */
if(zz==a)
printf("zz==a");
else
printf("zz!=a");
}
却输出了zz==a,这说明整型的数0可以赋给zz,是书中写错了吗?
请高手解释一下,谢谢
...全文
1623 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
fangrk 2004-12-07
  • 打赏
  • 举报
回复
把整数值赋给一个枚举类型变量时通常需要转换。
比如C中
enum letter{a,b,c,d}zz;
zz=(letter)0;
或者C++中zz=static_cast<letter>(0);

如果没有转换,编译器一般也不会报错,但通常会有一个警告。
daikaiming 2004-12-06
  • 打赏
  • 举报
回复
不是赋值当然不要转换啊!

你给你的枚举型变量赋值为0当然也对啊!!

书是冒错的!!

理解的问题!
mathe 2004-12-06
  • 打赏
  • 举报
回复
同编译器开关有关系。一般来说,这样使用编译器至少会产生Warning的。
但是如果是c编译器(而不是c++),很多编译器会连Warning也没有,但是
大部分c++编译器应该会报错。
比较安全的用法还是加上类型转化。
daibao9922 2004-12-06
  • 打赏
  • 举报
回复
"TC下编译通过,系统自动为枚举类型赋0,1,2,3的值,在VB中枚举类型就是Long型
iming() "
这是不是就意味着在TC下,枚举类型变量可以像整型一样参予各种运算?
iming 2004-12-06
  • 打赏
  • 举报
回复
TC下编译通过,系统自动为枚举类型赋0,1,2,3的值,在VB中枚举类型就是Long型
longx 2004-12-06
  • 打赏
  • 举报
回复
把整型赋给一个枚举类型变量时必须强制类型转换.

枚举类型变量实际上就是整型数值

这里的强制类型转换用于编译器编译时检查,根据各个编译器的实现不同,可以不需要显式转换。
wangjie__ 2004-12-06
  • 打赏
  • 举报
回复
个人觉得,enum变量完全可以当成整形变量来使用!
daibao9922 2004-12-06
  • 打赏
  • 举报
回复
"我收回我的话,把int赋给enum是需要显式转换的。
pomelowu(羽战士) "

请问我那小段程序的第三行不就是把int赋给enum吗?
pomelowu 2004-12-06
  • 打赏
  • 举报
回复
我收回我的话,把int赋给enum是需要显式转换的。
pomelowu 2004-12-06
  • 打赏
  • 举报
回复
楼上的**,你看错了~~
zzffrr 2004-12-06
  • 打赏
  • 举报
回复
测试一次不就知道了.
daibao9922 2004-12-06
  • 打赏
  • 举报
回复
我的意思是程序中的第三行和"把整型赋给一个枚举类型变量时必须强制类型转换"这句话有矛盾
pomelowu 2004-12-06
  • 打赏
  • 举报
回复
尽信书不如无书。而且老谭那本书错误多多~~

VC下也能直接赋值的。你查查MSDN看看就知道了。
fangrk 2004-12-06
  • 打赏
  • 举报
回复
zz==a是比较,不是赋给

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧