首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >是否检查值是否在未定义的枚举中?

是否检查值是否在未定义的枚举中?
EN

Stack Overflow用户
提问于 2019-05-29 22:45:44
回答 1查看 109关注 0票数 0

我正在处理一个在不同处理器上运行的文件,因此头文件会根据硬件的不同而变化。我的程序需要接收一个索引,如果它是特定枚举的有效索引,则使用它,否则使用默认值。

我需要检查它是否是此枚举的有效索引。但是,枚举的处理器与处理器略有不同。我为每个芯片都有一个头文件,所以我不知道定义了多少索引。下面是它的大致外观:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
typedef enum
    {
    POWER_LEVEL_0
    POWER_LEVEL_1,
    POWER_LEVEL_2,
    POWER_LEVEL_3,
    POWER_LEVEL_4
    } power_type;

我需要能够测试是否定义了接收到的索引,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int input;
...
if( exists_in_power_type(input) )
    //accept the value
else
    //use default value

我知道索引的数量将在大约4到7的范围内,如果我在一个可能有8个或更多电源选项的新处理器上运行这个项目,这个数字可能会增加。在这种情况下,我希望我的程序是可移植的,并且只需在该处理器的新标头中定义一个同名的枚举。

这个问题可能会简单一点,因为枚举值从0开始,以1为增量。有没有办法在不知道枚举定义的情况下获得枚举的长度/最大值?有没有类似的工作我可以在这里使用?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-29 22:55:08

没有跨平台的方法来确定特定enum的最大合法枚举值。但是,您可以通过在所有其他值之后引入一个虚拟枚举值来绕过此问题:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
typedef enum
{
    POWER_LEVEL_0
    POWER_LEVEL_1,
    POWER_LEVEL_2,
    POWER_LEVEL_3,
    POWER_LEVEL_4,
    ILLEGAL_POWER_LEVEL // Not to be used directly; must be last
} power_type;

现在,您可以按如下方式编写helper函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bool exists_in_power_type(power_type value) {
    return 0 <= value && value < ILLEGAL_POWER_LEVEL;
}

只要ILLEGAL_POWER_LEVEL是最后一个枚举值,这种方法就会检查您是否为value分配了与某个枚举匹配的值。

希望这能有所帮助!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56369464

复制
相关文章
如何检查 Java 数组中是否包含某个值 ?
在逛 programcreek 的时候,我发现了一些专注细节但价值连城的主题。比如说:如何检查Java数组中是否包含某个值 ?像这类灵魂拷问的主题,非常值得深入地研究一下。
用户7886150
2021/04/28
9.1K0
Java检查枚举是否包含给定的字符串?
enum choices {a1, a2, b1, b2}; 方法一: public static boolean contains(String test) { for (Choice c : Choice.values()) { if (c.name().equals(test)) { return true; } } return false; } 方法二: EnumUtils.isValidEnum(MyEnum.cla
似水的流年
2019/12/06
4.4K0
灵魂拷问:如何检查Java数组中是否包含某个值 ?
另外,我想要告诉大家的是,作为程序员,我们千万不要轻视这些基础的知识点。因为基础的知识点是各种上层技术共同的基础,只有彻底地掌握了这些基础知识点,才能更好地理解程序的运行原理,做出更优化的产品。
沉默王二
2019/12/17
4.8K0
在bash脚本中如何检查一个命令是否存在
避免使用 which。它是一个外部进程,相对而言 hash、type 或 command 这样的内置程序执行效率更高,你还可以依靠内置程序来实际执行所需的操作,而且外部命令的效果很容易因系统而异。
程序熵
2023/09/25
4330
在bash脚本中如何检查一个命令是否存在
育种中如何检查系谱是否有错误
这里推荐我写的R包learnasreml中的check_pedigree函数,简单好用,结果友好。能够检查:
邓飞
2021/12/12
2.8K0
JavaScript 检查是否是数字
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/109551.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/05
1.1K0
js检查日期是否合法
检查日期是否合法 <script> function CheckDateTime(str) { var reg = /^(\d+)-(\d{1,2})-(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/; var r = str.match(reg); if (r == null) return false; r[2] = r[2] - 1; var d = new Date(r[
江一铭
2022/06/16
6.4K0
js检查是否是数组
该方法兼容Chrome 5, Firefox 4.0, IE 9, Opera 10.5 和 Safari 5,详细兼容性,可以查阅这篇文章。
IT工作者
2022/01/27
3.4K0
JS检查是否支持Storage
查看效果:http://hovertree.com/code/html5/q69kvsi6.htm
全栈程序员站长
2022/07/15
2.9K0
PostgreSQL中索引是否存储空值?
偶然在PostgreSQL官方文档上看到这句话:an IS NULL or IS NOT NULL condition on an index column can be used with a B-Tree index。
数据库架构之美
2021/03/16
2.4K0
数组中某值是否重复问题
遍历一遍原数组,每遍历到一个数就把其exist对应位置(如遍历到10则exist的第10个位置)的书变为1。
摸鱼的G
2023/02/22
1.5K0
LeetCode 2042. 检查句子中的数字是否递增
句子是由若干 token 组成的一个列表,token 间用 单个 空格分隔,句子没有前导或尾随空格。 每个 token 要么是一个由数字 0-9 组成的不含前导零的 正整数 ,要么是一个由小写英文字母组成的 单词 。
Michael阿明
2022/01/07
1.7K0
LeetCode 2042. 检查句子中的数字是否递增
检查app的activity是否在当前
APP开发中经常会遇到这种需求,需要检查当前的APP是不是可见的,比如,如果是可见的就维持一个socket长连接,如果切到后台不可见了,就断开这个连接。Android本来并不允许APP去监听home键事件,所以我们没发像iOS那样通过监听home键事件来做对应的处理。不过还好Android的Activity的生命周期给我们提供了一种解决这个问题的方法,我们只需要在每个Activity的onStart和onStop中去维持一个计数,如果这个数值大于0,就表示我们的APP还有Activity是在前台运行的,等
xiangzhihong
2018/01/30
9890
检查Linux是否被入侵的方法
一、检查系统日志 lastb //检查系统错误登陆日志,统计IP重试次数 二、检查系统用户 1、cat /etc/passwd //查看是否有异常的系统用户 2、grep "0" /etc/passwd //查看是否产生了新用户,UID和GID为0的用户 3、ls -l /etc/passwd //查看passwd的修改时间,判断是否在不知的情况下添加用户 4、awk -F : '$3==0 {print $1}' /etc/passwd //查看是否存在特权用户 5、awk -F : 'length($2
joshua317
2018/04/16
2.1K0
Android 判断是否在通话中
转载请以链接形式标明出处: 本文出自:103style的博客 最后的判断代码: /** * 是否正在电话通话中 */ private boolean phoneIsInUse() { TelephonyManager mTelephonyManager = (TelephonyManager) activity.getSystemService(Context.TELEPHONY_SERVICE); int state = mTelephonyManager.getCallSt
103style
2022/12/19
1.3K0
python 检查是否存在ddos攻击
import dpkt import socket import optparse
用户5760343
2019/07/31
3.7K0
python 检查是否存在ddos攻击
Javascript中对象如何检查key(键)是否存在
如果要特别测试对象实例的属性(而不是继承的属性),请使用hasOwnProperty:
IT工作者
2022/02/09
26.7K0
Go中枚举值有效性检查最佳实践
由于Go中的枚举是使用类型别名构造的,因此我们无法实现对枚举值的限制。例如,如果我们接收到到以下JSON内容将会发生什么?
Go学堂
2023/01/31
1.5K0
jquery判断数组中是否包含某个元素的值_java判断元素是否在数组中
如果arry数组里面存在”C#” 这个字符串则返回该字符串的数组下标,否则返回(不包含在数组中) -1
全栈程序员站长
2022/11/02
5.8K0
点击加载更多

相似问题

如何检查值是否在MySQL枚举中?

11

检查是否在C枚举中定义了值?

61

检查枚举是否有多个值

48

检查变量是否属于枚举值

31

如何检查枚举值是否有效?

1116
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文