c 枚举与字符串对 的几个方法

c使用枚举与字符串对的几种方法,供参考。

enum name { Zero, One, Two } ;
const char* name[] = {"Zero", "One", "Two"};//遍历 
int size = sizeof(name)/ sizeof(name[0]);
//或字符串数组后加个空指针。
const char** ptr ;
for(ptr = name; *ptr ; ptr++);

方便灵活。

enum name { Zero, One, Two,Ten=10 };
const char* name[] = {[Zero] = " Zero",[One] = "One",[Two] = "Two",[Ten] = "Ten";
};

可忽略顺序。可跳数, 不过像上面的数组大小是11,跳过的字符串指针为空。

三 预处理。

实现方式较多,C预处理能力基本都是粘贴替换,功能较弱,写了个代码较短的。

#define CON(A, B) _CON(A, B)
#define _CON(A, B) A##B#define _ARGN(  _00,_01,_02,_03,_04,_05,_06,_07,_08,_09,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19, \_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39, \_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_50,_51,_52,_53,_54,_55,_56,_57,_58,_59, \_60,_61,_62,_63,_64,_65,_66,_67,_68,_69,_70,_71,_72,_73,_74,_75,_76,_77,_78,_79, \_80,_81,_82,_83,_84,_85,_86,_87,_88,_89,_90,_91,_92,_93,_94,_95,_96,_97,_98,_99, \N, ...) N //获取参数个数
#define ARGN(...) _ARGN(~, ##__VA_ARGS__, \                                     99,98,97,96,95,94,93,92,91,90,89,88,87,86,85,84,83,82,81,80, \79,78,77,76,75,74,73,72,71,70,69,68,67,66,65,64,63,62,61,60, \59,58,57,56,55,54,53,52,51,50,49,48,47,46,45,44,43,42,41,40, \39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21,20, \19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0)#define GET_ARG(prefix,...) CON(GET_ARGS_,ARGN(__VA_ARGS__))(prefix, __VA_ARGS__) 
#define GET_ARGS(...) CON(GET_ARGS_S_,ARGN(__VA_ARGS__))(__VA_ARGS__) #define GET_ARGS_2(p,v1,v2) p##v1,p##v2
#define GET_ARGS_S_2(v1,v2) #v1,#v2#define DENUM(name,prefix,...)  \enum prefix##name { GET_ARG(prefix,__VA_ARGS__) }; \const char* name[] = { GET_ARGS(__VA_ARGS__)}DENUM(name,,Zero,One);   //  enum name { Zero, One} ;// const char* name[] = {"Zero", "One"};
DENUM(name,Enum_,zero,one);  //  enum Enum_name { Enum_zero, Enum_one} ;// const char* name[] = {"zero", "one"};

据参数数目添加定义,自行修改。

#define GET_ARGS_2(p,v1,v2) p##v1,p##v2   
#define GET_ARGS_S_2(v1,v2) #v1,#v2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/727169.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中国联通云技术,有哪些产品

中国联通国际公司,作为中国联通集团对外拓展国际市场的重要窗口与平台,已在国际电信领域取得了显著成就,其产品线涵盖了从基础联接到云端服务的多个层面,旨在为全球用户提供一体化、端到端的高品质信息服务解决方案。 大联接产品…

Mybatis-Plus——06,CRUD查

CRUD查 一、普通查询1.1、通过id查询单个用户1.2、通过id查询多个用户1.3、条件查询 通过map封装 二、分页查询2.1、配置分页插件2.2、运行方法 三、通过wrapper条件构造器查询3.1、查询name不为空,email不为空,age大于18的用户3.2、查询nameJone的用户3…

2024普通商家如何通过短视频矩阵快速破圈?

一个账号发1条作品,每条作品1000曝光覆盖1000人 十个账号发10条作品,每条作品1000播放量覆盖100000人 一百个账号发100条作品,每条作品1000播放量覆盖10000000人...... 如果我们有300个、500个账号甚至更多呢?自然每天能够覆盖到…

哪款洗地机值得买?希亦、追觅、米博、美的谁才是行业标杆?

在家庭清洁中,最让我们苦恼的便是厨房垃圾了,油渍跟食物残渣,用扫把扫了后,要反反复复的湿拖五六次,期间不停的手洗拖把,这套流程下来,往往容易腰酸背痛,手指皱巴巴的,这…

[数据集][图像分类]黄瓜叶子病害分类数据集172张3类别

数据集类型:图像分类用,不可用于目标检测无标注文件 数据集格式:仅仅包含jpg图片,每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数):172 分类类别数:3 类别名称:["nitrogen_and_potassium_def…

SAP MM学习笔记43 - 特殊调达流程 - 支付计划

以前学习了特殊调达流程 受托品和外注,中断了一阵儿去复习了PP了,咱继续回来研究MM。 SAP MM学习笔记42 - 特殊调达流程 - 受托品(寄售)-CSDN博客 SAP MM学习笔记41 - 特殊调达流程 - 外注加工-CSDN博客 本章讲SAP 特殊调达流程…

Get了!原来朋友圈定时发布如此简单!

你是不是也有这样的烦恼?微信号太多,有时候会顾不上发朋友圈? 别担心!微信管理系统来帮你解决这个问题,实现朋友圈定时发布!让我们一起来看看如何利用微信管理系统的强大功能来提升我们的社交媒体效率吧。…

Interceptor拦截器+JWT令牌实现登陆验证

一、背景 与过滤器的作用类似,不过拦截器是spring中的组件,只能拦截进入spring的请求;过滤器则可以拦截所有从前端页面发送来的请求。 *拦截器和过滤器选一就可以实现登陆验证,过滤器的实现在以下这篇博客中,有需要可…

在Exchange中启用/禁用搜索索引

默认情况下,所有的新邮箱数据都是启用Exchange搜索,仅当多个邮箱迁移到该Exchange Server时,才禁用搜索索引。 获取数据库的Exchange搜索索引 使用Get-MailboxDatabase 来获取数据库的搜索索引 Get-MailboxDatabase | Select-Object Name,…

蚂蚁SEO泛程序什么用?

蚂蚁SEO泛目录程序是一种常见的网站优化方法,其核心原理是利用高权重的网站继承目录,进而达到快速收录与排名的效果。具体表现形式分为网站、目录以及文章单页,通过目录文件的方式,利用关键词优化布局提升网站排名和流量。 这种技…

【自动驾驶系列丛书学习】2.《自动驾驶汽车环境感知》学习笔记

《自动驾驶技术概论》学习笔记 致谢:作者:甄先通、黄坚、王亮、夏添 -------------------------------------------------------------------------------------------------------- 笔记目录 -----------------------------------------------------…

QEMU调试——通过获取设备树(dtb文件)查询开发板的外设地址信息

1、适用场景 使用qemu时,想快速知道开发板的地址空间映射情况,特别是某些外设控制器的寄存器基地址 2、查询QEMU支持的开发板 qemu-system-riscv32.exe -M ? 3、获取开发板对应的dtb文件 1、qemu-system-riscv32.exe -M nuclei_evalsoc 2、dumpdtb nucl…

触发HTTP preflight预检及跨域的处理方法

最近在做需求的过程中,遇到了很多跨域和HTTP预检的问题。下面对我所遇到过的HTTP preflight和跨域的相关问题进行总结: 哪些情况会触发HTTP preflight preflight属于cors规范的一部分,在有跨域的时候,在一定情况下会触发preflig…

设计模式-原型模式实践案例

原型模式(Prototype Pattern)是一种创建型设计模式,它通过复制现有的实例来创建新的实例,而不是通过初始化过程。在 Java 中,这通常是通过实现 Cloneable 接口并定义 clone() 方法来实现的。原型模式适用于创建复制对象…

linux 文件权限

仅仅记录一下,怎么添加文件权限 r表是读 (Read) 、w表示写 (Write) 、x表示执行 (eXecute) 读、写、运行三项权限可以用数字表示,就是r4,w2,x1,777就是rwxrwxrwx 你可能不懂什么意思 举个例吧! 如上图有一个文件,它…

arm系统构建的三部分

1.boot/loader 启动 uboot引导程序 uboot启动之前要明确内核文件位置(服务器-和网线连着的机器或SD卡),uboot设置参数,寻找文件位置(放服务器上,需要IP地址路径,通过网线下载到开发板上。&…

跨界探险:出海与网络安全的奇幻之旅

在这个全球化的时代,"出海"已经成为了众多企业家和技术爱好者的热门话题。不论是跨界电商、游戏产业,还是技术开发,所有的这些都离不开一个看似晦涩却又极为重要的技术——SOCKS5代理以及代理IP的应用。让我们一起踏上这场结合网络…

利用auto-py-to-exe库的简单图形界面实现.py到.exe的转换

文章目录 1. auto-py-to-exe 简介2. 安装与使用3. 配置项介绍4. 打包完成 1. auto-py-to-exe 简介 运行 .py 文件需要配套相应的 Python 解释器和相关的依赖项,而很多时候我们会面临光有待演示的 .py 程序,而没有支持演示的环境的尴尬。一种解决办法就是…

仪酷LabVIEW OD实战(4)——Object Detection+OpenVINO工具包快速实现yolo目标检测

‍‍🏡博客主页: virobotics(仪酷智能):LabVIEW深度学习、人工智能博主 🎄所属专栏:『仪酷LabVIEW目标检测工具包实战』 📑上期文章:『仪酷LabVIEW OD实战(3)——Object Detectiononnx工具包快速…

蓝桥杯2023年第十四届省赛真题-岛屿个数|DFS

题目链接: 蓝桥杯2023年第十四届省赛真题-岛屿个数 - C语言网 (dotcpp.com) 参考视频: 【[蓝桥杯]真题讲解:岛屿个数(BFS遍历图)】 https://www.bilibili.com/video/BV1uc411v7Tw/?share_sourcecopy_web&vd_sou…