2293|1

7815

帖子

57

TA的资源

裸片初长成(中级)

楼主
 

【靠谱例程联盟】20131222 不够安全的enum [复制链接]

在C/C++里,我们都知道,可以用enum枚举型定义那些取值有限固定的 变量。
很可惜,这个类型是不带安全检查的。

意思就是说,假如你enum了一个周变量,它只有Mon = 1,Tue = 2,Wed =3.....
假如你传入一个 8 或者 某处计算出错突然冒出了个9

原则上来说我们非常希望它会做点什么
但实际上他什么都不会做。

它和一般的宏相比,我想,唯一的好处就是 看的时候比较舒服吧。
是的,可读性很重要,可是现在我觉得,它对机器运行的效果也非常重要。

不过仔细想了想,要强求他做到这些事情,也的确有点强人所难。
所以,只好我们自己干了。

查资料时,看到java没有采纳这个类型,不过它提供了另一种增加安全检查更加安全的枚举型。
因此,这个记录就是,我们希望试图为C/C++构建这样一个带安全检查的 安全枚举型。
此帖出自编程基础论坛
点赞 关注
 

回复
举报

7815

帖子

57

TA的资源

裸片初长成(中级)

沙发
 

这个小问题这么久我一直没有彻底想明白。

现在确认了。

因为枚举其实是常量,它不是变量。

就是说,它其实和宏没有太大区别,我试图看 《ANSI C标准》这本书——一份文档的中文翻译。

 

这份文档我搜索了 枚举 这两个字,基本上都带上了 常量 的描述。

 

当然,我匆匆搜索着看,其实并没有确切,那么,枚举这个常量和 const 以及宏 的区别到底是什么?

但是很显然,它是常量,最大的一个说法就是

 

你enum 了 MONDAY是1以后,你不可能给MONDAY赋值成其他数值,由此可见,它和我们平时熟悉的C变量完全是两回事。

——当然,以后我再enum的时候,也就会全部用大写了,也就是宏那个形式。

 

但这样一来,也就是说,用enum来做用户定义的数据类型,真的意义不大,至少它不能提供 C编译器层面的检查。

 

如果想实现这个目的,得另外想办法。或者利用一定的人为检查手段。

 

 

 

 

 

 

 

此帖出自编程基础论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表