发布时间:2026/8/22 17:30:50
如何在编译时确定宏定义的值 如何在编译时确定宏定义的值你是不是也碰见过这样的问题项目代码里到处是条件编译#ifdef、并且条件编译生效判断存在组合宏定义逻辑或者条件编译本身存在多重嵌套的情况追踪代码时很难确定某个分支逻辑是否生效。同样的代码里面的宏定义会也存在多层宏嵌套的场景很难确定该宏展开后的最终结果。更隐晦的是有时候交叉编译链工具也会通过命令行参数注入宏定义靠追踪代码本身是无从知晓这些宏定义的值的。本文介绍通过预处理器指令来实现在编译时确定某个宏定义的值一、#error判断宏定义是否生效如果只是想确认某个代码片段中宏定义是否生效不需要看值更简单的做法是直接使用预处指令#error触发编译报错例如#ifdefined(__MACRO1__)||defined(__MACRO2__)||defined(__MACRO3__)#errorroute covered#endif#ifdef__MACRO1__#ifdef__MACRO2__#ifdef__MACRO3__#errorroute covered#endif#endif#endif需要注意的是#error触发时会终止编译过程。二、#pragma message输出宏的值我们可以通过下面的方式将宏定义的值直接打印输出#definePRINT_MACRO_HELPER(x)#x#definePRINT_MACRO(x)#xPRINT_MACRO_HELPER(x)#define__MACRO1__123#pragmamessage(PRINT_MACRO(__MACRO1__))编译时编译器会在输出信息中打印如下信息__MACRO1__123过程解读1. 字符串化运算符#在 C/C 预处理过程中预处理器发现#运算符后会把宏定义原样转成字符串如果是宏参数就不会先开参数本身。也就是说PRINT_MACRO_HELPER(__MACRO1__)// 结果是 __MACRO1__ 而不是 1232. 转换过程PRINT_MACRO(__MACRO1__) ↓ __MACRO1__ PRINT_MACRO_HELPER(__MACRO1__ // 宏函数PRINT_MACRO展开函数名替代 ↓ __MACRO1__ PRINT_MACRO_HELPER(123 // 宏函数PRINT_MACRO展开参数替代 ↓ __MACRO1__123 // 宏函数PRINT_MACRO_HELPER展开三、宏定义展开后的预处理文件对于更复杂的场景要求如查看整个文件的宏展开全貌、批量核对预定义宏可以结合编译器的预处理输出选项将宏定义预处理后的信息包含在预处理后的文件中。gcc下直接展开整个文件看上下文gcc-Eyour_file.cexpanded.c更详细的调试选项如果你需要更深入地了解宏的定义和展开过程可以在-E的基础上配合-d选项。选项作用-dM仅列出所有宏的#define定义包括系统预定义的宏不输出预处理后的代码。-dD既输出所有宏的#define定义也输出预处理后的代码。-dU类似于-dD但只输出那些被实际展开过或被#ifdef测试过的宏。这将会生成一个纯净的、所有宏都已展开、所有头文件都已包含的 C/C 代码文件是调试宏定义和头文件包含问题的利器。

相关新闻

2026/8/22 17:30:50

【机器学习】(44)—— 机器学习公平性

【机器学习】(44)—— 机器学习公平性 文章目录【机器学习】(44)—— 机器学习公平性1. 全局指标过关,仍可能伤害部分群体1.1 一个容易被忽略的场景2. 机器学习公平性在问什么问题2.1 与预测偏差篇的关系2.2 公平性讨论…

2026/8/22 17:30:50

AI旅游谁在买单?4类B端用户付费率超35%的ROI分析

2025年,我们团队做过一次实验:同一款AI旅游规划产品投放给10000个用户,定价199元每次或2980元每年。整体付费率4.2%,符合行业平均。但拆解后发现,有4类人群的付费率超过35%。这4类人不是最有钱的,不是最年轻…

2026/8/22 18:50:56

快速上手 AirBattery:Mac 上一键盯住所有 Apple 设备电量

快速上手 AirBattery:Mac 上一键盯住所有 Apple 设备电量 【免费下载链接】AirBattery Get the battery usage of all your devices on your Mac and put them on the Dock / Menu Bar / Widget! && 在Mac上获取你所有设备的电量信息并显示在Dock / 状态栏 …

2026/8/22 18:50:56

CPU大模型推理的混合量化实战:二三五六位精度设计原理

1. 为什么“二三五六位”不是笔误,而是CPU端大模型推理的现实突围路径你有没有试过在一台没有GPU的服务器上跑Qwen2-7B?不是用Ollama那种轻量封装,而是真正把模型加载进内存、喂进CPU、让它吐出答案——结果是:3分钟才生成第一句&…

2026/8/22 18:50:56

DeepSeek-V4-Pro Harness破甲测试:AI编程助手真实效能评估指南

如果你最近关注AI编程助手,可能已经注意到一个现象:很多开发者开始讨论DeepSeek-V4-Pro的“破甲”能力,特别是针对其官方工具链Harness的测试。这背后反映的,其实是一个更深层次的问题:当我们谈论一个AI模型的“强大”…

2026/8/22 18:50:56

低成本AI模型部署实战:五块钱跑通Qwen1.5-1.8B量化推理

最近在技术社区里,一个名为“这家伙才五块钱你敢信”的项目突然火了起来。很多开发者第一眼看到这个标题,可能会以为是什么消费电子产品的促销,或者一个网络段子。但点进去才发现,这其实是一个关于低成本、高性能AI模型部署与推理…

2026/8/21 13:13:49

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/21 20:14:07

工业传感器与变送器详解:序章 从物理世界到工业数据

序章 从物理世界到工业数据 ——重新认识工业传感器与变送器 工业自动化系统正变得日益复杂。今天的工业现场早已不是简单的控制回路,而是由多层技术共同构成的立体体系:PLC、DCS、SCADA、MES、工业互联网、边缘计算与人工智能。控制系统可以执行复杂算法,工业网络可以实现…

2026/8/21 15:40:01

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/21 15:40:01

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/22 1:39:53

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…