带有C枚举的scanf()
发布时间:2020-12-16 09:29:07 所属栏目:百科 来源:网络整理
导读:以下是我们的代码库中的典型情况. enum ConfigOption { CONFIG_1=1,CONFIG_2=2,CONFIG_3=3 }ConfigOption cfg1,cfg2;sscanf(s,"%d",cfg1); 这是一个内部使用的仿真软件.没有分发.易于维护和正确性非常重要.可移植性和用户界面 – 不是真的. 问题是c中的枚举
以下是我们的代码库中的典型情况.
enum ConfigOption { CONFIG_1=1,CONFIG_2=2,CONFIG_3=3 } ConfigOption cfg1,cfg2; sscanf(s,"%d",&cfg1); 这是一个内部使用的仿真软件.没有分发.易于维护和正确性非常重要.可移植性和用户界面 – 不是真的. 问题是c中的枚举不一定是int.因此,我们会收到编译器警告,并且在使用其他编译器或启用优化时可能会出现错误行为. 一种解决方案就是将& cfg转换为int *.但是,这不会捕获编译器决定在枚举中分配int以外的东西的情况. 所以我提出了以下解决方案: template<typename T> inline int& eint(T& enum_var) { assert(sizeof(T) == sizeof(int)); return (int&)enum_var; } 现在使用scanf如下: sscanf(s,&eint(cfg1)); 我很想听听上述问题的意见和其他(更好的)解决方案. 解决方法
如果你有像vs2010这样的现代编译器,你可以指定枚举元素的大小
enum class ConfigOption: unsigned int {CONFIG_1=1,CONFIG_3=3}; 它在C 0x中的新功能 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |