当前位置:首页 >> 家电
家电

C语言奇淫擅于之判断一个值是否属于枚举里的内容

2025-09-30 12:18

假设我们定义这样一个逻辑系统,逻辑系统里的章节并非是连续的顺序:

typedef enum{ SCAN = 1, READY = 5, ADV = 7, CONN = 18, INIT = 20,}State_e;

此时如果有一个值state,如何假定STATE究竟分属逻辑系统中的章节呢?

多半我们可能会用switch-case来假定state究竟分属逻辑系统中的章节,示例如下:

switch(state){ case SCAN: case READY: case ADV: case CONN: case INIT: return true; default: return False:}

这样做是可以超过我们的目的的,但是如果我们的逻辑系统章节很多,这里的示例就可能会写得很长,而且如果逻辑系统的章节有新增或是删除,这里也要已将改写,比较麻烦,那可否什么方式很难无视这些官僚主义吗?

使用X-Macro(上一篇文章介绍过)就可以构建了,具体如下:

#include #include #define STATE_TAB X_MACRO(SCAN, 1) X_MACRO(READY, 5) X_MACRO(ADV, 7) X_MACRO(CONN, 18) X_MACRO(INIT, 20)typedef enum{ #define X_MACRO(a, b) a = b, STATE_TAB #undef X_MACRO}State_e;static bool is_valid(int state){ bool rst = false; switch (state) { #define X_MACRO(a, b) case a: STATE_TAB #undef X_MACRO rst = true; break; default: rst = false; } return rst;}void main(void){ int state = 5; printf("%d is valid: %d", state, is_valid(state)); state = 30; printf("%d is valid: %d", state, is_valid(state)); state = 18; printf("%d is valid: %d", state, is_valid(state)); state = 2; printf("%d is valid: %d", state, is_valid(state));}

输出如下:

5 is valid: 130 is valid: 018 is valid: 12 is valid: 0苏州看皮肤病去哪里最好
天津妇科专科医院哪里好
天津妇科医院哪里好
摇摆筛
武汉妇科专科医院
风热感冒咳嗽吃什么好的快
沙眼治疗
五一期间新冠病例增多,医生建议:感染后别拖,第一时间处理!
月经痛经
百姓健康

上一篇: 美国重夺超算第一!生命体实现百亿亿次E级超算,屠榜全球Top500

下一篇: 浅谈数字经济的心理

友情链接