LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 769|回复: 3

枚举类型错误

[复制链接]
发表于 2005-11-9 08:33:58 | 显示全部楼层 |阅读模式
int main()
{
  enum gun
  {
    one,two,three
  }gun1;
  gun1=20;
  printf("%d",gun1);
}
用gcc编译后运行,竟出现了结果20,我不明白gun的值只能取0,1,2这三个值,为什么不报错?这样的话枚举类型变量就可以任意来赋值了,而定义枚举变量就是为了让它只能在给定的几个值的范围内取值,比如说上面的gun1理论上只能取0,1,2这三个值,如果给gun1赋值为20应该提示错误,各位大侠们,说说你们的看法吧!
发表于 2005-11-9 09:48:44 | 显示全部楼层
enum就是int
回复 支持 反对

使用道具 举报

发表于 2005-11-9 14:06:51 | 显示全部楼层
Post by hkdjining
int main()
{
  enum gun
  {
    one,two,three
  }gun1;
  gun1=20;
  printf("%d",gun1);
}
用gcc编译后运行,竟出现了结果20,我不明白gun的值只能取0,1,2这三个值,为什么不报错?这样的话枚举类型变量就可以任意来赋值了,而定义枚举变量就是为了让它只能在给定的几个值的范围内取值,比如说上面的gun1理论上只能取0,1,2这三个值,如果给gun1赋值为20应该提示错误,各位大侠们,说说你们的看法吧!


我认为这是C语言缺乏严格的类型检查导致的
c++ 就做的好一点,你可以试试 g++
回复 支持 反对

使用道具 举报

发表于 2005-11-9 22:53:13 | 显示全部楼层
Post by hkdjining
int main()
{
  enum gun
  {
    one,two,three
  }gun1;
  gun1=20;
  printf("%d",gun1);
}
用gcc编译后运行,竟出现了结果20,我不明白gun的值只能取0,1,2这三个值,为什么不报错?这样的话枚举类型变量就可以任意来赋值了,而定义枚举变量就是为了让它只能在给定的几个值的范围内取值,比如说上面的gun1理论上只能取0,1,2这三个值,如果给gun1赋值为20应该提示错误,各位大侠们,说说你们的看法吧!

哪本书上说的?
C/C++的enum等同于int,只要不超出int的表示范围(有符号或无符号)是不会提示错误的。
枚举一般由相应的枚举符来赋值,如果用整型数值给枚举赋值,程序员应该确保其数值在枚举的范围之内,否则是无定义的。
枚举符可以当做整型常量用。

Post by rickxbx
我认为这是C语言缺乏严格的类型检查导致的
c++ 就做的好一点,你可以试试 g++

C++只提示类型出错,int不允许隐式转换到enum,因为大部分整数值在特定的枚举里都没有对应的表示。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表