C/C++ 使用 # 打印枚举常量的枚举名称字符串

C++ 打印enum class枚举类 C++11 中引入了强类型的enum class类型(或称为枚举类),但是有一点比较尴尬的是,std::cout标准流不支持输出enum class类型。E0349 没有与这些操作数匹配的 " 阅读详情
AI摘要

文章介绍了两种在C++中根据枚举值打印其名称的方法,重点讲解了利用宏定义实现这一功能。此外,还分享了如何使用echo命令输出彩色字符串,包括各种字体颜色、背景色和文本属性的设置代码示例。

唠嗑

要根据变量打印枚举值,有两种较为方便的方法:

1,用字符串数组存储枚举变量名,写个函数根据传进来的枚举值打印
2,利用’ # ’ 在预处理阶段就把值换成对应常量字符串输出

本文主要讲解第二种方法,基本原理是下面这串宏定义:

#define STR(x) #x  // 把某个变量的变量名以字符串输出

代码段

根据Switch判断一下输入的值,然后根据值来进行输出:

// 把case装进去,方便复制粘贴
#define CASE_STR(x) case x: return #x

const char* print_enum(TT e) {
    switch(e) {
        CASE_STR(OK);
        CASE_STR(NO_OK);
        CASE_STR(TEST);
        CASE_STR(HEL_WORLD);
        CASE_STR(GUESS);
        default: return "UNKNOW_EVENT!";
    }
}

就可以畅快打印啦:

    TT oo = OK;
    TT ee = (TT)2;
    cout<< STR(HELLO_WORLD)<<endl;
    cout<< print_enum(oo) << endl;
    cout<< print_enum(ee) << endl;

效果:
在这里插入图片描述


echo 输出彩色字符串:

这段是个人常用,但单独写个文章又感觉没必要,于是加的,方便查看_(:з」∠)_

  • 模板:
echo -e "\e[xx;xxm 你的内容 \e[0m"
  • 解析:
    -e 是echo的转义字符意思。
    \e[xxm xx是数字选项,选择字体属性、颜色、背景色用的,对顺序没有要求

  • 各类数字选项:

背景色:
黑色背景:40
红色背景:41
绿色背景:42
黄色背景:43
蓝色背景:44
洋红背景:45
青色背景:46
白色背景:47

字体颜色:
黑色字体:30
红色字体:31
绿色字体:32
黄色字体:33
蓝色字体:34
洋红字体:35
青色字体:36
白色字体:37

属性
0: OFF
1: 高亮显示
3: 斜体
4: 下划线
5: 闪烁
7: 反色显示
8: 不可见
9: 删除线

echo -e "\e[9;32m  hello \e[0m"  #绿色字体、删除线的hello

参考文章:
#和##的作用

C 语言使用宏自定义可打印的枚举(enum) 类型 1. 前言: 说点废话,时间紧的请直接跳过,看后面的实现。 尽管本人很反感 C 语言中的宏定义,特别是滥用宏定义经常会让问题变的扑朔迷离,但是不得不承认,在某些时候,其的确是很好用的,就比如今天的例子。 我们代码中涉及到故障码或者状态机,很多人都会用宏定义或者枚举表示,我个人是比较倾向于后者的,当让是由于其能在编译阶段对重定义等问题的规避。但是呢,C 语言相比于其他的高级语言,对机器的友好更胜过... 阅读详情

相关推荐

C++与Rust安全互操作:FFI/ABI原理与5大实战模式详解

在系统级编程中,外部函数接口(FFI)是实现不同编程语言间互操作的核心机制,它定义了函数调用、参数传递和内存布局等底层约定。其原理基于应用二进制接口(ABI)这一二进制层面的交互标准,确保跨语言调用时数据表示和函数调用约定的一致性。这一技术的核心价值在于,它允许开发者复用现有代码库,同时引入更安全的编程范式,从而在保持高性能的前提下提升系统可靠性。典型的应用场景包括游戏引擎、高频交易系统、嵌入式驱动等对性能和安全性均有严苛要求的领域。本文聚焦于C++与Rust这两种高性能系统语言的互操作,深入剖析了通过类型

weixin_30787531的博客 957

C语言打印宏定义/枚举变量 名称和变量值

打印宏定义变量和值

Joke 1864

C/C++预编译指令与宏定义:从原理到实战的完整指南

预编译指令是C/C++编译过程中的关键环节,它在编译器进行语法分析前对源代码进行文本处理。其核心原理是通过预处理器执行宏展开、文件包含和条件编译等操作,从而控制代码的最终编译形态。这一机制的技术价值在于实现代码复用、平台适配和编译期配置,是构建大型可维护项目的基石。在工程实践中,预编译指令广泛应用于解决头文件重复包含、定义编译开关和实现跨平台代码等场景。其中,宏定义作为最常用的功能,通过文本替换简化代码,但也需警惕参数多次求值和运算符优先级等陷阱。本文深入解析了预编译指令的工作流程,并提供了头文件守卫、宏函

weixin_30851867的博客 315

C语言中以字符串形式输出枚举变量

1. 枚举应用说明 每个枚举常量对应一个整形数字,很多时候可以像整形一样使用;但是如果要求打印枚举变量名的字符串, 办法也有很多,查看网上方法几乎都需要转换,要么用数组,下面要说的是一种可以算是直接打印的新方法; 代码: #include <stdio.h> #define ENUM_CHIP_TYPE_CASE(x) case x: return(#x); enum cvmx_chip_types_enum { CVMX_C...

智眸之音 2998

C++(11):枚举类

1.具名枚举的名字及其成员的名字是全局可见的。3.枚举变量所占内存空间的大小由编译器决定。2.枚举很容易被隐式转换为整型变量。

风静如云的博客 1549

如何导入su_利用GIS快速生成SU场地模型

01|前言:进入2021年了,希望大家也是一个新的开始。告诫自己多写文章多更新,多读点书多旅行。然而元旦由于出去玩了4天,积累了一些事情要处理,一直没有时间好好写点东西。今天给大家带来的分享主题叫“利用GIS快速生成SU场地模型”。相关的视频方法其实B站上也有,但我相信视频很多人都不会看,我自己也是。直接给大家上操作流程。主要的操作步骤是【获取场地的矢量shp文件】—【导入ArcScen...

weixin_33806859的博客 9813

C/C++语言 奇技淫巧-对象皆可字符串

系列文章目录 文章目录系列文章目录前言一、宏的妙用1.宏中的#2.宏中的## 前言 💝总结了在实际开发过程中使用到的开发技巧,在此记录。 一、宏的妙用 1.宏中的# 👉官方解释:数字符号或"字符串化"运算符 (#) 将宏参数转换为字符串文本,而不扩展参数定义。它仅用于接受参数的宏。如果它位于宏定义中的正式参数之前,则宏调用传递的实际参数将括在引号中,并被视为字符串文本。然后,字符串文本将替换宏定义中字符串化运算符和正式参数组合的每个匹配项。   实际参数的第一个标记之前和实际参数的最后一个标记后面

烫手的热山药的博客 789

别再到处找资源了!WinCC 7.5 SP2官方下载与Windows 10保姆级安装避坑指南

本文提供了WinCC 7.5 SP2在Windows 10上的官方下载与安装全流程指南,重点解决了资源获取难、系统兼容性问题及分卷压缩处理等常见痛点。通过详细的步骤和实用技巧,帮助用户顺利完成安装并优化配置,适用于工控领域的学习者和从业者。

weixin_32924297的博客 478

【Python】Python中的常量与变量

【Python】Python基础知识——常量与变量 详细介绍Python中的常量与变量相关知识点……

蒙奇D索大的博客 1898

安路科技FPSoC开发实战:从芯片特性到边缘计算应用

本文深入解析安路科技FPSoC芯片在边缘计算领域的开发实战,重点介绍SALDRAGON系列芯片的异构计算架构优势,包括RISC-V/ARM处理器与FPGA的协同工作。通过工业控制和智能视觉应用案例,展示硬件加速实现与低功耗设计技巧,帮助开发者高效利用FPSoC进行边缘计算应用开发。

weixin_29248611的博客 375

文献阅读:SAR像素偏移的性能改进An Improvement of the Performance of SAR Offset Tracking Approach

像素偏移追踪POT文献阅读

weixin_56301271的博客 342

【C语言宏定义字符串化精髓】:掌握#和##操作符的高级技巧与实战应用

掌握C语言宏定义的字符串化操作,轻松实现代码自动化与调试优化。详解#和##操作符在日志输出、断言处理等场景的应用技巧,提升开发效率。理解原理并规避常见陷阱,值得收藏。

AlgoChat的博客 361

UNet改进(52):轴向+代理注意力让UNet既轻快又精准

本文提出了一种改进的UNet架构,通过引入轴向注意力代理模块增强医学图像分割性能。该模块将二维自注意力分解为行列两个一维注意力操作,结合可学习代理节点进行全局信息聚合,在保持计算效率的同时提升模型对长距离依赖的建模能力。实验表明,该方法在多个医学图像数据集上较传统UNet提升3.2%-5.7%的Dice系数,边界质量显著改善。该方案特别适用于具有方向性结构的医学图像分割任务,如血管、器官等,在计算复杂度和分割精度之间实现了良好平衡。

2501_91516851的博客 327

按名称与发布者枚举 Windows 应用包:基于 PackageManager.FindPackages 的 C++/C 双语言实战

本文以 Windows-classic-samples 仓库中的 [Enumerate app packages by name and publisher sample](https://link.gitcode.com/i/eb5aaa4a11297a9dfeb8791eb9cfc104) 为蓝本,深入讲解如何通过 `Windows.Management.Deployment.PackageM

gitblog_00821的博客 196

倍福--RS232自由口实现

RS232/485通信协议是在现场中常用到的,比如触摸屏、温控模块等设备控控制器做通信,会常用到此类协议,本文介绍RS232/485自由口通信的实现,并用PC调试助手进行测试。 目 录 软硬件版本 3 1.1. 倍福Beckhoff 3 1.1.1. 控制器硬件 3 1.1.2. 控制器软件 3 硬件连接 3 2.1. PC COM介绍 3 2.2. RS232/RS485连接 3 3.2.1. N030…………. 4 3.2.2. N031…………. 4 2.3. 实际线路连接 5 PLC程序 7 3

weixin_41883890的博客 3284

华为非AI方向0603笔试真题-爆破小游戏(详细思路+多语言题解)

华为非AI方向0603笔试第二题【爆破小游戏】,提供详细思路讲解以及代码实现。

qq_45776114的博客 358

学会这3种宏字符串化技巧,让你的C代码立即提升一个档次!

掌握C语言宏定义的字符串化操作,轻松实现代码自动化与调试优化。详解#运算符、双层宏展开和可变参数宏三种技巧,适用于日志输出、断言处理等场景,提升代码可读性和维护效率。学会这些方法,让编程更高效,值得收藏。

VarFlow的博客 530

3篇1章6节:R基础绘图之图形的保存和导出技巧

高质量图形导出是R语言用户在数据分析和科研工作中的重要技能。通过合理控制图形的分辨率、选择合适的颜色管理方案和文件格式,以及掌握批量保存图形的技巧,可以显著提升图形的展示效果和应用范围。这不仅有助于提高研究成果的展示质量,还能在各种专业场合中展现数据分析的精确性和美观性。

MD Code 1481

C语言枚举(enum)完全指南:从基础语法到高级应用实战

在C语言编程中,常量管理是提升代码可读性和维护性的基础环节。枚举(enum)作为一种用户自定义数据类型,其核心原理是为一系列整型常量赋予有意义的名称,编译器默认从0开始分配整数值。这项技术的核心价值在于将代码中的“魔数”(Magic Number)替换为自解释的标识符,从而增强代码可读性、限制变量取值范围并便于调试。在实际工程实践中,枚举常与switch-case语句结合实现状态机,或通过位运算定义标志位(Flags),广泛应用于错误码系统、配置选项和有限状态机等场景。本文深入解析C语言枚举的定义、语法、常

weixin_34326558的博客 293

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

C语言预处理器操作符#、##、#@详解:从基础语法到高级元编程实战

C语言预处理器是编译过程中的关键阶段,负责在代码编译前执行文本替换、条件编译和文件包含等操作。其核心原理是基于文本的直接替换和符号操作,这赋予了开发者进行编译时代码生成和元编程的能力,对于提升代码的灵活性和复用性具有重要技术价值。在嵌入式开发、系统编程和框架构建等应用场景中,预处理器操作符能有效减少重复代码,实现泛型编程和自动化代码生成。本文聚焦于预处理器中强大但易被忽略的#(字符串化)、##(记号连接)操作符,以及非标准的#@扩展,通过调试打印、泛型容器实现和枚举-字符串映射等实战案例,深入解析其组合应用

weixin_34098209的博客 244

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

SumatraPDF 打印完全指南:窗口打印、命令行 `-print-settings` 全参数解析与实战配方

> 本文围绕 SumatraPDF 的打印功能展开:从窗口中的系统打印对话框与 Advanced 高级选项,到不依赖任何对话框、在全部 Windows 版本上行为一致的命令行打印,逐项拆解 `-print-settings` 的每一个令牌(页码范围、缩放、方向、纸张与纸盒、份数/双面/色彩、输出控制),并补充退出码语义、PDF 内嵌打印默认值、`PrinterDefaults` 高级配置以及常见打

gitblog_00188的博客 345

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

C语言枚举实战:从魔数替代到高级用法,提升代码可读性与健壮性

在C语言编程中,数据类型和代码可读性是影响软件质量的核心要素。枚举(enum)作为一种用户自定义数据类型,其原理是通过为整数值赋予有意义的符号名称,将离散的常量组织成逻辑相关的集合。这一机制的技术价值在于,它在编译期提供了基础的类型提示和有限的取值范围约束,从而增强了代码的意图表达和可维护性。在实际应用场景中,枚举广泛用于状态机、错误码、配置选项和标志位组合,是替代“魔数”(Magic Number)和分散宏定义的最佳实践。通过将枚举与switch语句、位域操作及字符串转换技术结合,开发者能构建出更清晰、更

weixin_34050005的博客 329

16 C预处理器和C库

C语言编译相关

kking_edc的博客 593

预处理器指令#define(C Primer Plus)

C Primer Plus 预处理

Simona_gy的博客 784

spine-c 自动化 C 包装生成器:从 spine-cpp 头文件到纯 C API 的 TypeScript 代码生成实践

本文基于 spine-runtimes 仓库中 `todos/done/2025-07-08-02-50-52-unfuck-spine-cpp-lite.md` 的设计记录,系统讲解 **spine-c** 运行时——一个由 TypeScript 代码生成器驱动的、把 spine-cpp C++ 头文件自动转换为 C 包装 API 的项目。文中覆盖类型提取、不透明指针映射、Array 特化、RT

gitblog_00469的博客 358

C语言宏编程:利用#和##实现动态命名与代码生成

在C语言开发中,宏预处理器是实现代码复用和元编程的基础工具。其核心原理是在编译前对源代码进行文本替换,这为自动化代码生成提供了可能。通过掌握#(字符串化)和##(标记连接)两个关键操作符,开发者可以突破简单文本替换的限制,实现变量名、函数名的动态生成,从而提升代码的抽象能力和可维护性。这一技术在泛型编程、日志系统、状态机等场景中具有重要价值,能够显著减少重复代码。本文以C语言宏的#和##操作符为例,深入解析其实现动态命名的机制,并结合实际案例展示如何规避宏展开中的常见陷阱,为编写更灵活、高效的C代码提供实践

weixin_34342905的博客 644
上一篇: 基于QRencode的 QT二维码显示 QImage像素操作和QPainter
下一篇: 使用google breakpad 定位linux C++ 程序崩溃点(嵌入式平台)
温柔大猩猩
博客等级 码龄7年 65粉丝 14原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值