这是我前几天学到的一个解决方案。出现您的问题的简化版本是:

#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宏创建字符串列表和枚举列表相关推荐

  1. C语言字符数组显示钻石,c++两种字符串赋值方式 并介绍 C语言下遍历目录文件的方式...

    c++字符串声明:一种是声明字符数组并赋值,另一种是直接声明string类 #define _CRT_SECURE_NO_WARNINGS #include #include #include &qu ...

  2. 枚举类——概述、常用方法、自定义枚举类、Enum创建枚举类

    一.枚举类的概述 1.枚举类的理解:类的对象只有有限个,确定的.我们称此类为枚举类 2.当需要定义一组常量时,强烈建议使用枚举类 3.如果枚举类中只一个对象,则可以作为单例模式的实现方式. 二.枚举类 ...

  3. 字符串类型、结构体、共用体、枚举、container宏、内存来源

    一.C语言的字符串类型 1.C语言没有原生字符串类型 很多高级语言像java.C#等就有字符串类型,有个String来表示字符串,用法和int这些很像,可以String s1 = "linu ...

  4. C语言之详解#ifdef等宏

    C语言之详解#ifdef等宏 这几个宏是为了进行条件编译.一般情况下,源程序中所有的行都参加编译.但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是&qu ...

  5. c语言node类型_高阶宏的妙用技法,C语言宏你所不知道的聪明技巧

    前言 什么是高阶宏?高阶宏就是以宏为参数的宏.以宏为参数的宏这就是这篇文章的重点.其实业界领先的代码库是有很多值得我们学习的,研究开源库也可以是大家学习的方向哦,通常开源库中90%的内容超出了新手对于 ...

  6. 【C语言】----宏定义,预处理宏

    什么是宏? 宏是学习任何语言所不可缺少的,优秀的宏定义可以使得代码变得很简洁且高效,有效地提高编程效率. 宏是一种预处理指令,它提供了一种机制,可以用来替换源代码中的字符串,解释器或编译器在遇到宏时会 ...

  7. C语言宏定义-跟踪调试宏

    C语言宏定义-跟踪调试宏 文章目录 C语言宏定义-跟踪调试宏 1. 简介 2. 相关宏 3. 例子 1. 简介 标准C语言预处理要求定义某些对象宏,每个预定义宏的名称一两个下划线字符开头和结尾,这些预 ...

  8. C语言宏定义(常用宏定义)

    C语言常用宏定义 常用宏定义 数值相关的宏定义 字符相关的宏定义 byte相关的宏定义 bit相关的宏定义 数组与结构体相关的宏定义 对齐的宏定义 常用宏定义 数值相关的宏定义 闰年的判断 ,年份可以 ...

  9. C语言宏定义(宏参数创建字符串、预处理粘合剂)

    #define CNAME value   或者 #define CNAME expression,常见的常量的定义是这样的,但是宏定义可比想象中的要灵活的多.它可以定义宏常量.宏函数,还可以输入数据 ...

  10. c语言 宏教程 pdf,C语言之详解_ifdef等宏.pdf

    C 语言之详解 #ifdef 等宏 指令用途 #空指令,无任何效果 #include 包含一个源代码文件 #define 定义宏 #undef 取消已定义的宏 #if 如果给定条件为真,则编译下面代码 ...

最新文章

  1. HDU 5734 Acperience
  2. Python游戏开发pygame模块,Python实现吃豆人,儿时的回忆
  3. P1799 数列_NOI导刊2010提高(06)
  4. Qt/QML 窗口阴影边框实现
  5. CSS实现自适应的图片背景边框代码
  6. pygame游戏开发入门例子
  7. windows进程管理器_任务管理器就能搞定9成的电脑问题?方法在这里!
  8. [Java] 蓝桥杯ALGO-42 算法训练 送分啦
  9. 解决Mybatis-plus高版本不向后兼容的问题
  10. BZOJ3997 TJOI2015组合数学(动态规划)
  11. 拓端tecdat|Matlab通过市场数据校准Hull-White利率模型参数
  12. 20191202每日一句
  13. Yalmip变量操作
  14. HDL4SE:软件工程师学习Verilog语言(七)
  15. ROS多设备组网(WSL+miniPC+Nv Orin)
  16. html5视频 小马哥,小码哥-HTML5培训之进击前端的动画狮!
  17. 看我们无处安放的青春
  18. 超全整理100个 Pandas 函数,建议收藏!
  19. 视觉Transformer上榜!DeepMind科学家:2020年AI领域十大研究进展
  20. OpenStack虚拟云桌面在携程呼叫中心的应用

热门文章

  1. Leetcode 59. 螺旋矩阵 II (每日一题 20210926)
  2. metapath2vec: Scalable Representation Learning for Heterogeneous Networks
  3. 【转载】深度学习数学基础(二)~随机梯度下降(Stochastic Gradient Descent, SGD)
  4. GeoPandas 笔记: GeoDataFrame.plot()
  5. MATLAB实战系列(二十八)-用matlab爬取火车票信息
  6. 机器学习中的矩阵向量求导(二) 矩阵向量求导之定义法
  7. 增强学习(一) ----- 基本概念
  8. 【机器学习算法-python实现】决策树-Decision tree(2) 决策树的实现
  9. wince6.0远程控制工具_【创新创效】门架业务主动监测工具和远程控制电源开关...
  10. QT,QVector 基本用法,遍历[实例讲解]