C语言中宏定义宏名和宏值之间的关系
最近我一直在看linux的内核源码程序里面有大量的宏定义的情况有时候又将宏名作为另外一个宏定义的宏值再次定义另外一个宏名那么我就有一个疑问c语言中宏的作用是什么宏值和宏名两者之间有什么关系呢这其实是2个问题。问题一宏的作用是什么大家都知道宏定义属于预处理语句的一种而预处理语句是有编译工具链中的预处理器处理的主要是将源文件文本中的宏值“查找全部替代”的方式将源文件中的宏名使用宏值替代。有点像现在文本编辑器中使用查找快捷键“CtrlF”和替代“CtrlH”值得注意的是整个过程只是文字处理工作不涉及到语法错误查找。也就是像word中使用查找快捷键“CtrlF”和替代“CtrlH”将工程中的每一个源文件中的内容进行了一次文字处理工作我感觉这样比较非常贴切之后后面编译器进行文本编译过程进行语法错误检查属于编译器的工作。回答为什么要发明宏明白对宏的处理我们就明白为什么要发明宏定义发明宏名和宏值。1使用宏的场景1有时候代码中某一小段代码有特定含义但是不足以形成一个函数这个时候就可以将这小段代码定义成一个宏特定含义是宏名这小段代码是宏值。这段代码如果涉及到变量这样定义的宏名带有一对小括号()小括号中的为参数形成了含参宏含参宏在“查找全部替代”时还需要对参数进行替代。2使用的宏的场景2单独定义某个宏名用于指导代码条件编译。如果定义了宏名则代码段A会被编译否则不被编译或者代码段B被编译。3使用的宏的场景3有些特定含义的常量不容易记住或者后面需要修改。这种场景最能体现宏的“查找全部替代”属性特定含义形成的文本为宏名数字为宏值。这个单片机寄存器的相关操作中使用特别多例如将寄存器的地址值这个我们人脑是记不住的但是它有特定含义因此就可以使用宏定义我们在后面代码中就使用宏名了。问题二宏名和宏值之间的关系是什么首先宏名是“语义化的”也就是具有特定含义的有点“泛型”的使用习惯使用英文大写单词加下划线描述成3个单词的文本单词数量往往少于等于3个符合人脑记忆的容易记住的文本组合。宏名更倾向于人脑容易记住、容易理解的人类自然语言英语宏值的特点往往是具体的不容易记住的过很长时间容易忘记的常量化的繁琐的代码片段宏值更适合被机器处理因此宏值也是属于C语言高级语言但是宏值更加适合或者更加容易更加倾向于被机器处理因此它表现出来的“语义型”往往不如前面的宏名。举个例子#define NAME “xiaming”宏名NAME和宏值“xiaoming”相比宏名更加具有语义性、抽象性概括性因为宏名NAME更容易被大脑记住时间长了也不会忘记而宏值“xiaming”具有具体含义表现为具体型属于特定字符串时间长了不容易被大脑记住时间长了谁还记得具体名字是什么更倾向于被机器处理。总之宏名是倾向于被人脑处理的代码片段宏值是倾向于被机器处理对的代码片段宏名具有人类语义型、抽象性、概括性宏值具有机器思维性、具体性、常量性、片段性。但是一定要记住的是宏名和宏值都是c语言高级语言的代码片段。C语言高级语言写出的函数更倾向于人脑的思维业务逻辑干什么事情完成什么工作因此它内部函数体使用或者处理宏名更加合适毕竟宏名也更倾向于人脑记忆特性因此在函数中尽量多的将一些代码段、常量等定义为特定符合人脑思维记忆理解的宏值文本单词是特别有意义的。因为如果函数中有大量强项于机器处理的常量、代码段等宏值这样交叉这人脑思维和机器思维增加了函数理解难度和复杂度。总之一句话函数写出了是给人看到需要让人理解起来更容易因此尽量多的将数字机器的宏值替代或编码为人脑语义的宏名是非常有必要的。写代码过程是将数字机器的宏值替代或编码为人脑语义的宏名的过程预处理器预处理的过程是人脑语义的宏名替代还原为数字机器宏值的过程。

相关新闻

【JVM调优实战】33-案例-容器化环境JVM内存陷阱

【JVM调优实战】33-案例-容器化环境JVM内存陷阱

案例:容器化(K8s)环境的 JVM 内存陷阱 本文是《JVM调优实战》专栏第 33 讲。 引言 把 JVM 应用从虚拟机搬到 Kubernetes,就像让一个习惯住大房子的人搬进精装修公寓。虚拟机时代,JVM 看到的是整台物理机的内存,想用多少用多少;而容器时代,Pod 被 resources.limits.mem…

2026/7/23 19:49:21 阅读更多 →
【JVM调优实战】32-案例-高并发网关GC停顿优化

【JVM调优实战】32-案例-高并发网关GC停顿优化

案例:高并发网关的 GC 停顿优化 本文是《JVM调优实战》专栏第 32 讲。 引言 API 网关是所有流量的"守门人"。上游调用方设置了 200ms 超时,你的网关必须在极短时间内完成鉴权、路由、限流、协议转换。打个比方:网关就像超市的收银台,如果收银员偶尔"卡住&q…

2026/7/21 18:44:38 阅读更多 →
开源在线演示文稿工具全攻略:5分钟学会免费制作专业PPT

开源在线演示文稿工具全攻略:5分钟学会免费制作专业PPT

开源在线演示文稿工具全攻略:5分钟学会免费制作专业PPT 【免费下载链接】PPTist PowerPoint-ist(/pauəpɔintist/), An online presentation application that replicates most of the commonly used features of MS PowerPoint, allowing f…

2026/7/22 22:12:44 阅读更多 →

最新新闻

信息系统项目管理师教程(第4版)笔记——第 7 章 项目立项管理

信息系统项目管理师教程(第4版)笔记——第 7 章 项目立项管理

第 7 章 项目立项管理 项目立项管理是对拟实施项目的技术先进性、经济合理性、实施可能性、社会价值等进行全面科学分析,为项目决策提供客观依据的技术经济研究活动,核心流程包括项目建议与立项申请、项目可行性研究、项目评估与决策三个核心阶段。其中&…

2026/7/25 20:14:40 阅读更多 →
2025广州AI+案例集:技术实现与行业应用解析

2025广州AI+案例集:技术实现与行业应用解析

1. 案例集背景与价值解读这份《2025年广州市"人工智能"典型案例集》的发布,标志着粤港澳大湾区人工智能应用进入规模化落地阶段。作为国内首个以城市为单位系统梳理AI应用场景的官方文件,其特殊价值在于收录的案例全部经过真实场景验证&#x…

2026/7/25 20:14:40 阅读更多 →
Runway AI视频生成新模型解析:Seedance 4K、Mini与Kling 3.0 Turbo实战指南

Runway AI视频生成新模型解析:Seedance 4K、Mini与Kling 3.0 Turbo实战指南

最近在AI视频生成领域,Runway再次成为焦点,推出了三款备受关注的新模型:Seedance 4K、Seedance Mini和Kling 3.0 Turbo。作为AI视频生成技术的重要参与者,Runway这次的产品更新无疑为开发者和创作者提供了更多可能性。本文将深入分析这三款新模型的技术特点、应用场景以及实…

2026/7/25 20:14:40 阅读更多 →
基于Docker部署Apache Doris集群:从零到生产级实践指南

基于Docker部署Apache Doris集群:从零到生产级实践指南

最近在数据仓库选型与部署实践中,Apache Doris 凭借其极速的实时分析性能和简便的运维特性,成为了许多团队的重点考察对象。然而,从官网文档到生产落地,中间总会遇到各种环境依赖、配置项理解以及集群部署的细节问题。本文将基于 Docker 这一标准化部署工具,为你拆解一套从…

2026/7/25 20:14:40 阅读更多 →
Windows屏幕标注终极指南:ppInk开源工具完全教程

Windows屏幕标注终极指南:ppInk开源工具完全教程

Windows屏幕标注终极指南:ppInk开源工具完全教程 【免费下载链接】ppInk Fork from Gink 项目地址: https://gitcode.com/gh_mirrors/pp/ppInk 在数字化协作日益重要的今天,屏幕标注工具已成为教育、商务演示和远程会议中的必备软件。然而&#x…

2026/7/25 20:14:40 阅读更多 →
UE5 AI控制SKM_Manny角色:解决动画与行为树冲突的完整方案

UE5 AI控制SKM_Manny角色:解决动画与行为树冲突的完整方案

1. 项目概述:当AI Controller遇上SKM_Manny最近在尝试用UE5的AI Controller来控制Epic官方提供的SKM_Manny角色时,我遇到了不少预料之外的问题。这听起来像是一个标准的“AB”组合,毕竟AI Controller是UE里控制NPC行为逻辑的核心组件&#xf…

2026/7/25 20:13:40 阅读更多 →

日新闻

突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档,该脚本就是为了解决您的…

2026/7/25 0:00:35 阅读更多 →
C++ string类模拟实现:从深拷贝到内存管理的完整指南

C++ string类模拟实现:从深拷贝到内存管理的完整指南

1. 项目概述:为什么我们要“手撕”string类?在C的学习道路上,尤其是从C语言过渡到C的“初阶”阶段,string类绝对是一个绕不开的核心。标准库里的std::string用起来太方便了,、find、substr,几个操作符和函数…

2026/7/25 0:00:35 阅读更多 →
三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

1. 先搞清楚“三角洲寻宝鼠”到底是什么工具从名称来看,“三角洲寻宝鼠”更像是一个资源查找或文件检索类工具,而不是游戏或娱乐软件。这类工具的核心价值在于帮助用户快速定位特定资源,比如文档、图片、压缩包或特定格式的文件。如果你经常需…

2026/7/25 0:00:35 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/25 5:08:22 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/25 5:13:53 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/24 18:52:18 阅读更多 →

月新闻