Something About C++ Macro(a Macro to print macro)

【AIGC】人工智能训练师(高级)考试题库-橙点同学 例如,在嘈杂的环境中进行声音转文字,即使是优秀的模型也可能会出现一些错误,但这并不意味着该模型本身质量差,在其他较为理想的环境下,它可能会有很好的表现。例如,在一些语音应用和系统中,会使用SSML来实现对语音合成的精细控制,如调整语速、语调、音量等,而这些应用和系统的开发往往会遵循W3C的相关标准和框架,其中就包括SSML这一语音合成标记语言。例如,在语音识别等场景中,像“去火车站怎么走”这样的语音指令,没有其他嘈杂的背景声音或模糊不清的表述,就属于无噪音的数据,有利于系统准确地进行处理和分析。 阅读详情
#include <iostream>
#include <string>

#ifdef _MSC_VER
#pragma warning(once:4996)
#endif

#define PRINT_MACRO_( x,...) #x #__VA_ARGS__
#define PRINT_MACRO( x ) PRINT_MACRO_( x )

#define MACRO_GET_VALUE(szParam)                           \
	{                                                      \
		memset(szValue, 0, sizeof(szValue));               \
		pszDot = strchr(pszBegin, '|');                    \
		if (pszDot == NULL)                                \
			strncpy(szValue, pszBegin, sizeof(szValue)-1); \
		else                                               \
		{                                                  \
			*pszDot = 0;                                   \
			strncpy(szValue, pszBegin, sizeof(szValue)-1); \
			pszBegin = pszDot + 1;                         \
		}                                                  \
			strncpy(szParam, szValue, sizeof(szParam)-1);  \
	}

int main()
{
	char szCJRQ[32] = {0};
	char szCJSJ[32] = {0};
	char szGDDM[32] = {0};
	char szZQDM[32] = {0};
	char szMMBZ[32] = {0};
	char szCJJG[32] = {0};
	char szCJSL[32] = {0};
	char szCJHM[32] = {0};
	char szHTXH[32] = {0};
	char szHBLX[32] = {0};
	char szJLXH[32] = {0};
	char szCWDM[32] = {0};

	char szValue[32] = {0};
	char *pszDot = NULL;
	char pszBuff[1024] = {0};
	_snprintf(pszBuff, sizeof(pszBuff) - 1, "20100901|105612|A172454682|600446|B|11.23|200|1|1234567890|CJ|1|0");
	char *pszBegin = pszBuff;

	MACRO_GET_VALUE(szCJRQ);
	MACRO_GET_VALUE(szCJSJ);
	MACRO_GET_VALUE(szGDDM);
	MACRO_GET_VALUE(szZQDM);
	MACRO_GET_VALUE(szMMBZ);
	MACRO_GET_VALUE(szCJJG);
	MACRO_GET_VALUE(szCJSL);
	MACRO_GET_VALUE(szCJHM);
	MACRO_GET_VALUE(szHTXH);
	MACRO_GET_VALUE(szHBLX);
	MACRO_GET_VALUE(szJLXH);
	MACRO_GET_VALUE(szCWDM);

	std::cout << PRINT_MACRO(MACRO_GET_VALUE(szCJRQ)) << std::endl;
	std::cout << PRINT_MACRO(MACRO_GET_VALUE(szCJSJ)) << std::endl;
	std::cout << PRINT_MACRO(MACRO_GET_VALUE(szGDDM)) << std::endl;
	std::cout << PRINT_MACRO(MACRO_GET_VALUE(szZQDM)) << std::endl;
	std::cout << PRINT_MACRO(MACRO_GET_VALUE(szMMBZ)) << std::endl;
	std::cout << PRINT_MACRO(MACRO_GET_VALUE(szCJJG)) << std::endl;
	std::cout << PRINT_MACRO(MACRO_GET_VALUE(szCJSL)) << std::endl;
	std::cout << PRINT_MACRO(MACRO_GET_VALUE(szCJHM)) << std::endl;
	std::cout << PRINT_MACRO(MACRO_GET_VALUE(szHTXH)) << std::endl;
	std::cout << PRINT_MACRO(MACRO_GET_VALUE(szHBLX)) << std::endl;
	std::cout << PRINT_MACRO(MACRO_GET_VALUE(szJLXH)) << std::endl;
	std::cout << PRINT_MACRO(MACRO_GET_VALUE(szCWDM)) << std::endl;

	std::cout << szCJRQ << std::endl;
	std::cout << szCJSJ << std::endl;
	std::cout << szGDDM << std::endl;
	std::cout << szZQDM << std::endl;
	std::cout << szMMBZ << std::endl;
	std::cout << szCJJG << std::endl;
	std::cout << szCJSL << std::endl;
	std::cout << szCJHM << std::endl;
	std::cout << szHTXH << std::endl;
	std::cout << szHBLX << std::endl;
	std::cout << szJLXH << std::endl;
	std::cout << szCWDM << std::endl;

	return 0;
}

Foxglove Studio实战:5步搞定自动驾驶数据可视化(附避坑指南) 本文详细介绍了如何使用Foxglove Studio高效搭建自动驾驶数据可视化工作流。通过五个核心步骤:环境准备、数据导入、面板搭建、交互分析与自动化集成,帮助开发者快速掌握这一专为机器人系统设计的开源平台。文章重点解析了其与ROS/ROS 2、MCAP等数据源的无缝对接,以及3D点云、多传感器融合、团队标注等核心功能,并附有实用的性能优化与避坑指南,旨在提升算法调试与团队协作效率。 阅读详情

相关推荐

配置思科交换机冗余链路汇聚

本文对交换机端口汇聚配置进行说明

istrangeboy&begin zero的博客 6685

Rust与Godot 4扩展开发:高性能游戏系统构建指南

在游戏开发领域,原生扩展技术是连接高级编程语言与游戏引擎的关键桥梁,它允许开发者突破脚本语言的性能限制,直接与引擎底层交互。其核心原理是通过动态链接库实现跨语言调用,将高性能语言的计算能力注入到游戏运行时环境中。这一技术的核心价值在于能够为性能敏感的游戏系统提供零成本抽象和内存安全保障,特别适用于需要处理高密度实体逻辑、复杂物理模拟或自定义网络协议的场景。通过Rust语言与Godot 4引擎的结合,开发者可以构建既安全又高效的游戏底层系统,例如实现基于ECS架构的实体管理系统或高性能计时器模块。本文以gde

weixin_34060299的博客 339

7系列ZYNQ硬件调试:Vitis无法识别ARM DAP的排查与解决

本文针对7系列ZYNQ开发中Vitis无法识别ARM DAP的典型硬件调试问题,提供了系统性的排查与解决方案。文章深入剖析了问题本质,指出ARM DAP无法访问的核心原因在于PS部分的电源、时钟或复位等硬件基础条件未满足,并重点强调了PS参考时钟(如33.333MHz晶振)的完整性是关键排查点。通过从电源完整性、时钟与复位信号到JTAG连接与焊接的逐步硬件排查,并结合软件配置交叉验证,为开发者提供了清晰的故障定位思路与实战指南。

weixin_29280657的博客 627

C++宏(Macro)的各种玩法

本文转载于http://orzz.org/cxx-macro-play/ 一、普通玩法 1. 基本功能 定义一个宏来替换字符串: #define MACRO_PRINTF printf 这样我们使用MACRO_PRINTF就如同printf一样。 我们还可以像这样定义一个宏名称,但不写任何东西: #define MACRO_NAME 然后像这样通过预定义的开关来调整代码实现: #ifdef ...

freshman94的博客 1万+

可乐学习NVMe之一:为什么SSD需要NVMe

1. NVMe SSD 结构简图 整体来看,NVMe SSD可以分为三部分,host端的驱动NVMe Driver、PCIe+NVMe实现的控制器以及NAND Flash+DDR4/DDR5存储介质。 芯片回片后Host侧软件或者驱动开发主要在应用层,通过一些测试工具进行benchmark跑分测试,performance性能分析,latency分析、stress-testing等等: 那么,接下来阐述为什么SSD需要NVMe,并再后续的文章介绍NVMe协议分析,个人针对协议的理解,如果有不当之处,还请各

Lucky 3170

带挂牵引车前向运动模型推导及仿真实现

牵引车-半挂车的车辆结构与普通的车辆相比增加了一个半挂车,它们之间通过鞍座相连接,为了分析半挂牵引车运动过程中的位姿和状态,本文将基于车辆的机械结构建立对应的运动学模型,该模型基于以下假设: 车辆行驶过程中,道路平坦且无凸凹; 车辆低速行驶,且运行过程中车身无侧倾和俯仰运动; 车辆行驶过程中,轮胎无形变,无侧向滑动,且无侧向力; 牵引车和半挂车均满足阿克曼转向几何原理; 牵引车与半挂车不会发现折叠。

jianmo的博客 3184

C/C++ 中的宏 (macros) 与宏展开的可视化显示

C/C++ 中的宏 (macros) 与宏展开的可视化显示

程永强 4443

无线通信入门:3种键控法(ASK/FSK/PSK)原理图解与实战对比

本文深入解析无线通信中ASK、FSK、PSK三种基础键控法的原理与应用。通过图解对比,阐明幅移键控(ASK)简单低成本但抗干扰差,频移键控(FSK)稳健且应用广泛,相移键控(PSK)高效但复杂。文章结合实战场景,为物联网和嵌入式开发者在选型时提供关键指导,帮助平衡数据速率、成本、功耗与抗干扰需求。

weixin_29274969的博客 190

c语言 macro,C/C++中宏/Macro的深入讲解

前言宏(Macro)本质上就是代码片段,通过别名来使用。在编译前的预处理中,宏会被替换为真实所指代的代码片段,即下图中 Preprocessor 处理的部分。C/C++ 代码编译过程 - 图片来自 ntu.edu.sg根据用法的不同,分两种,Object-like 和 Function-like。前者用于 Object 对象,后者用于函数方法。C/C++ 代码编译过程中,可通过相应参数来获取到各编...

weixin_36180611的博客 1654

RK3588开发笔记-ES8311音频芯片调试记录

本篇博客主要记录如何在RK3588平台试ES8311音频芯片的过程。这包括硬件连接、内核配置、驱动程序调试和测试步骤。通过以上步骤,我们成功在RK3588平台上调试了ES8311音频芯片。这包括硬件连接、内核配置、设备树配置、驱动加载以及音频测试。希望这篇调试记录能为其他开发者提供一些帮助。如果你有任何问题或建议,欢迎留言讨上调论。

flypig has a dream! 3163

告别定位不准!Inner-IoU助力YOLOv11边界框回归精度飙升

Inner-IoU 凭借辅助边框的创新设计,成功解决了传统 IoU 损失在小目标、遮挡场景下的收敛难题,为 YOLOv11 注入了更强的定位能力。从原理剖析到代码集成,本教程已为你铺就了一条“精度提升”的实战路径。现在,不妨亲自上手尝试,让你的目标检测模型在各类数据集上都能交出一份“精度优异”的答卷——相信我,当你看到检测框精准贴合目标的那一刻,你会明白这份尝试的价值。

FJN110的博客 192

C++基础知识: 宏

需要注意的是,宏定义不是语言本身的一部分,而是由预处理器实现的功能。因此,在使用宏时,需要注意宏的作用域、替换文本的正确性和宏带来的代码可读性问题。其中,宏名称是一个标识符,替换文本可以是任何文本字符串,可以是常量、表达式、语句或其他宏。在程序中,当使用 "MAX(3, 4)" 时,预处理器会将其替换为 "((3) > (4)?(3) : (4))",返回最大的那个参数。在程序中,当出现 "PI" 时,预处理器会将其替换为 "3.14159"。宏还可以带参数,这种宏称为函数宏。

p1641122453的博客 603

大数据运营可视化:Tableau+PowerBI数据看板搭建教程

当企业数据量从“GB级”跃升到“TB级”,运营人员面临的最大挑战不再是“如何收集数据”,而是“如何让数据说话”。数据看板作为“运营指挥中心的仪表盘”,能将零散的用户行为、业务指标、流量趋势浓缩成可快速解读的视觉语言。本文结合Tableau(自由探索的“数据瑞士军刀”)与PowerBI(微软生态的“组合家具”)两大工具,从需求分析→数据准备→指标设计→视图搭建→ dashboard 组合,一步步教你搭建符合业务逻辑的运营看板。

AI智能探索者的博客 1367

C++:宏(Macro)

/宏Macro :使用预处理器来“宏”化某些操作,实现一定的自动化,在代码中替换和查找,发生在预处理阶段,模版发生在编译过程。//预处理阶段:是一个文本编辑阶段,在这个阶段,我们可以控制哪些代码可以实际喂给编译器 (以#开头,是预处理指令符号)//在define中如果需要换行,用\ 即可表示代码中的换行,为了美观手动换行,但是代码里的换行要用转义字符\。第二种: #define PR_Debug 0。宏的两种定义方式(xcode)//禁用自定义区域代码。

2201_75903640的博客 414

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

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

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

weixin_34050005的博客 329

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

C/C++编译器错误代码深度解析:从预处理到代码生成的调试指南

在C/C++开发中,编译器错误代码是开发者与编译系统沟通的关键桥梁。理解这些错误代码背后的原理,需要从编译过程的基本概念入手:源代码首先经过预处理阶段,进行宏展开、文件包含和条件编译等操作,生成纯净的代码文本供后续分析。这一阶段产生的错误(如C4431、C4432等)往往与指令格式或环境配置直接相关,而非语法问题。深入掌握这些错误的排查技巧,能帮助开发者快速定位问题根源,提升调试效率。在工程实践中,合理利用预处理输出功能(如-E选项)和编译器警告配置,可以系统性地预防和解决常见的编译问题。本文聚焦于预处理阶

408

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

#define 宏 vs inline 函数:3大场景性能与安全性对比评测

本文深入对比了C/C++中`#define`宏与`inline`函数在性能优化和代码安全方面的差异,通过三大典型场景的评测分析,帮助开发者理解宏定义与内联函数的适用场景与潜在风险。重点关注类型安全、调试支持和作用域管理,为代码优化提供实用建议。

weixin_34384681的博客 669

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

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

weixin_34342905的博客 645

C语言泛型编程与代码复用:宏、void*与模块化设计实践

泛型编程是提升代码复用性和维护性的核心编程范式,其核心思想是编写独立于特定数据类型的通用算法和数据结构。在C语言中,虽然缺乏原生模板语法,但通过预处理器宏、泛型指针(void*)和函数指针等机制,开发者能够有效实现泛型编程。宏作为编译前的文本替换工具,可用于创建类型无关的代码模板,但需警惕其副作用和调试复杂性;void*指针结合函数指针则支持运行时多态,是标准库qsort等通用算法的实现基础。这些技术显著提升了代码的模块化程度和可移植性,尤其在嵌入式系统、操作系统内核和基础库开发等场景中价值巨大。本文深入探

weixin_30873847的博客 421

FastText文本分类实战:轻量级模型解决真实业务中的脏数据问题

文本分类是自然语言处理中最基础且高频的工程任务,其核心在于将非结构化文本映射到预定义语义类别。FastText 通过词向量平均与子词(n-gram)建模,在不依赖复杂上下文机制的前提下,实现了对拼写错误、缩写、网络用语等真实世界脏数据的强鲁棒性。这种设计使其在CPU环境秒级训练、内存占用低、部署简单,技术价值突出体现在‘够用、稳定、上线快’的工业落地能力。典型应用场景覆盖客服工单自动打标、社交媒体情感分析、电商评论分类及内部邮件路由等。本文以新冠推特情感数据集为载体,完整呈现从原始CSV清洗、__label

weixin_34192816的博客 364

C/C++的“宏”(macro)的可变长参数语法

语法 gcc named variable argument #define eprintf(format, args...) fprintf (stderr, format, args) #define eprintf(format, args...) fprintf (stderr, format, ##args) C99 standard variadic macros #def...

yjf_victor的专栏 3893

define中#的用法

##是一个连接符号,用于把参数连在一起 #是“字符串化”的意思。出现在宏定义中的#是把跟在后面的参数转换成一个字符串 #define paster( n ) printf( "token " #n" = %d\n ", token##n ) 所以paster(9);就是相当于 printf("token 9 = %d\n",token9);

河马的进阶之旅 645

C++ Macro Usage

Debug log Sometimes we need to print some logs to show the application is running well during debug. But for release version, we choose to ignore these logs. So we can use macros to finish these fun

得救之道就在其中 1161

C/C++中macro的一些特殊使用

ISO C++推出之后,C/C++中宏(macro)的使用一直都备受争议,就好像当年保守诟病的goto语句一样。有所不同的是,现在的C/C++代码中使用goto语句的使用率是越来越少了。而macro仍然在C/C++ programming中占据一席之地——例如集赞誉之耀和诋毁之辱于一身的Microsoft Foudation Classes就把macro的强大功能发挥得淋漓尽致。套用“存在着就是合

shinco的专栏 7404

C/C++中宏使用总结

C/C++中宏总结C程序的源代码中可包括各种编译指令,这些指令称为预处理命令。虽然它们实际上不是C语言的一部分,但却扩展了C程 序设计的环境。本节将介绍如何应用预处理程序和注释简化程序开发过程,并提高程序的可读性。 ANSI标准定义的C语言预处理程序包括下列命令: #define,#error,#i nclude,#if,#else,#elif,#endif,#ifdef,#ifndef,#und

YOLANDE_QI的专栏 766

C++预处理命令#define宏(macro)展开的若干用法

提及#define,你会不会马上联想到自己时时用#define MAX 100用于标记一个数组的长度?这样做无非两个原因,一来,#define是编译时的宏展开,对运行时间毫无影响。其二,使用诸如MAX这类见名知其意的标识符代替生硬的数学符号使程序更加清晰,而且更改起来着实方便,一

AJIOY的专栏 1万+
上一篇: MS SQL Delete Tables From DataBase
下一篇: GetModuleFileName False failed with error 126 (The specified module could not be found)
XeKernel
博客等级 码龄14年 1粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值