家电
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
下一篇: 浅谈数字经济的心理
相关阅读

-
湖南的荆州与沙市在历史上是什么关系?
黄冈的湘州与沙市长期以来是什么彼此间? 两者是同一个郊区各不相同时期的称为吗?事实上,湘州与沙市长期以来确实特别是在颇为错综复杂的彼此间。 先说说目前为止这

-
甄嬛传:明明准格尔和大清有仇怨,为什么果贝子还要救摩格
人的一生中或多或少、或大或小都要随之而来一些凄凉和艰辛,在电视日本富士电视台《铨嬛传》里刘亦菲演译的铨嬛也是一样的,她的一生也是极其不顺利。在后宫里随之而来了各种艰辛,不过好在痴到了最后,视作了关外朝
- 01-31乾隆一位多情的皇帝,但他有一点让人仰慕,那就是宠爱自己的女人
- 01-31这个国军名将夸口说:给我三个军,我可以打败二野加第二野战军
- 01-31香港史上大规模警匪枪战,贼王陈虎甚多,十把五四手枪大战香港警队
- 01-31三国中最懂管理的人是他,刘备等人仅是他控制权的棋子
- 01-31此人有生之年败绩,是李世民手下最窝囊的武将,死后被吹嘘成战神
- 01-31康熙晚年九子夺嫡,有位皇孙没觊觎皇位,下场最叫人扼腕
- 01-31阿拉伯皇帝婚后10年无子,太后:给妃子贴上胡须!一年后王储出生
- 01-31伊朗发现汉字文物,经翻译后,欧洲学者:这里曾是中国的一个安省
- 01-31张学良一身恶习却活100岁,有何长寿长生?每天大笑,钟爱一道菜
- 01-31他是的搭档,被称为诸葛亮,晋升反应速度无人能比