c 语言 字符 宏 枚举,从C宏创建字符串列表和枚举列表
这是我前几天学到的一个解决方案。出现您的问题的简化版本是:
#define ENUM_MACRO(name, v1, v2, v3, v4, v5, v6, v7)\
enum name { v1, v2, v3, v4, v5, v6, v7};\
const char *name##Strings[] = { #v1, #v2, #v3, #v4, #v5, #v6, #v7};
ENUM_MACRO(Week, Sun, Mon, Tue, Wed, Thu, Fri, Sat);
但是您可以使用一个函数调用来改进版本,如下所示:
#define ENUM_MACRO(name, v1, v2, v3, v4, v5, v6, v7)\
enum name { v1, v2, v3, v4, v5, v6, v7};\
const char *name##Strings[] = { #v1, #v2, #v3, #v4, #v5, #v6, #v7};\
const char *name##ToString(value) { return name##Strings[value]; }
ENUM_MACRO(Week, Sun, Mon, Tue, Wed, Thu, Fri, Sat);
这将成长为:
enum Week { Sun, Mon, Tue, Wed, Thu, Fri, Sat};
const char *WeekStrings[] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
const char *WeekToString(value) { return WeekStrings[value]; };
您甚至可以使用第一个元素的偏移量,如下所示:
#define ENUM_MACRO(name, offset, v1, v2, v3, v4, v5, v6, v7)\
enum name { v1 = offset, v2, v3, v4, v5, v6, v7};\
const char *name##Strings[] = { #v1, #v2, #v3, #v4, #v5, #v6, #v7};\
const char *name##ToString(value) { return name##Strings[value - offset ]; }
ENUM_MACRO(Week, 1, Sun, Mon, Tue, Wed, Thu, Fri, Sat);
我希望这有帮助。
保重,
贝乔
参考:
c 语言 字符 宏 枚举,从C宏创建字符串列表和枚举列表相关推荐
- C语言字符数组显示钻石,c++两种字符串赋值方式 并介绍 C语言下遍历目录文件的方式...
c++字符串声明:一种是声明字符数组并赋值,另一种是直接声明string类 #define _CRT_SECURE_NO_WARNINGS #include #include #include &qu ...
- 枚举类——概述、常用方法、自定义枚举类、Enum创建枚举类
一.枚举类的概述 1.枚举类的理解:类的对象只有有限个,确定的.我们称此类为枚举类 2.当需要定义一组常量时,强烈建议使用枚举类 3.如果枚举类中只一个对象,则可以作为单例模式的实现方式. 二.枚举类 ...
- 字符串类型、结构体、共用体、枚举、container宏、内存来源
一.C语言的字符串类型 1.C语言没有原生字符串类型 很多高级语言像java.C#等就有字符串类型,有个String来表示字符串,用法和int这些很像,可以String s1 = "linu ...
- C语言之详解#ifdef等宏
C语言之详解#ifdef等宏 这几个宏是为了进行条件编译.一般情况下,源程序中所有的行都参加编译.但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是&qu ...
- c语言node类型_高阶宏的妙用技法,C语言宏你所不知道的聪明技巧
前言 什么是高阶宏?高阶宏就是以宏为参数的宏.以宏为参数的宏这就是这篇文章的重点.其实业界领先的代码库是有很多值得我们学习的,研究开源库也可以是大家学习的方向哦,通常开源库中90%的内容超出了新手对于 ...
- 【C语言】----宏定义,预处理宏
什么是宏? 宏是学习任何语言所不可缺少的,优秀的宏定义可以使得代码变得很简洁且高效,有效地提高编程效率. 宏是一种预处理指令,它提供了一种机制,可以用来替换源代码中的字符串,解释器或编译器在遇到宏时会 ...
- C语言宏定义-跟踪调试宏
C语言宏定义-跟踪调试宏 文章目录 C语言宏定义-跟踪调试宏 1. 简介 2. 相关宏 3. 例子 1. 简介 标准C语言预处理要求定义某些对象宏,每个预定义宏的名称一两个下划线字符开头和结尾,这些预 ...
- C语言宏定义(常用宏定义)
C语言常用宏定义 常用宏定义 数值相关的宏定义 字符相关的宏定义 byte相关的宏定义 bit相关的宏定义 数组与结构体相关的宏定义 对齐的宏定义 常用宏定义 数值相关的宏定义 闰年的判断 ,年份可以 ...
- C语言宏定义(宏参数创建字符串、预处理粘合剂)
#define CNAME value 或者 #define CNAME expression,常见的常量的定义是这样的,但是宏定义可比想象中的要灵活的多.它可以定义宏常量.宏函数,还可以输入数据 ...
- c语言 宏教程 pdf,C语言之详解_ifdef等宏.pdf
C 语言之详解 #ifdef 等宏 指令用途 #空指令,无任何效果 #include 包含一个源代码文件 #define 定义宏 #undef 取消已定义的宏 #if 如果给定条件为真,则编译下面代码 ...
最新文章
- HDU 5734 Acperience
- Python游戏开发pygame模块,Python实现吃豆人,儿时的回忆
- P1799 数列_NOI导刊2010提高(06)
- Qt/QML 窗口阴影边框实现
- CSS实现自适应的图片背景边框代码
- pygame游戏开发入门例子
- windows进程管理器_任务管理器就能搞定9成的电脑问题?方法在这里!
- [Java] 蓝桥杯ALGO-42 算法训练 送分啦
- 解决Mybatis-plus高版本不向后兼容的问题
- BZOJ3997 TJOI2015组合数学(动态规划)
- 拓端tecdat|Matlab通过市场数据校准Hull-White利率模型参数
- 20191202每日一句
- Yalmip变量操作
- HDL4SE:软件工程师学习Verilog语言(七)
- ROS多设备组网(WSL+miniPC+Nv Orin)
- html5视频 小马哥,小码哥-HTML5培训之进击前端的动画狮!
- 看我们无处安放的青春
- 超全整理100个 Pandas 函数,建议收藏!
- 视觉Transformer上榜!DeepMind科学家:2020年AI领域十大研究进展
- OpenStack虚拟云桌面在携程呼叫中心的应用
热门文章
- Leetcode 59. 螺旋矩阵 II (每日一题 20210926)
- metapath2vec: Scalable Representation Learning for Heterogeneous Networks
- 【转载】深度学习数学基础(二)~随机梯度下降(Stochastic Gradient Descent, SGD)
- GeoPandas 笔记: GeoDataFrame.plot()
- MATLAB实战系列(二十八)-用matlab爬取火车票信息
- 机器学习中的矩阵向量求导(二) 矩阵向量求导之定义法
- 增强学习(一) ----- 基本概念
- 【机器学习算法-python实现】决策树-Decision tree(2) 决策树的实现
- wince6.0远程控制工具_【创新创效】门架业务主动监测工具和远程控制电源开关...
- QT,QVector 基本用法,遍历[实例讲解]