C++宏函数的定义

发布时间:2026/9/10 3:07:33

C++宏函数的定义 C宏函数的定义与使用在C中宏函数是通过预处理器实现的文本替换机制使用#define指令定义。它会在编译前将代码中的宏调用直接替换为定义的文本。基本语法#define宏名(参数列表)替换文本示例加法宏函数#defineADD(a,b)((a)(b))// 正确的ADD宏函数实现#includeiostreamusingnamespacestd;intmain(){coutADD(1,2)endl;// 输出: 3coutADD(3*4,5)endl;// 输出: 17return0;}宏函数的注意事项1. 为什么参数要加括号// 错误示例不加括号#defineMULTIPLY(a,b)a*b// 调用时intresultMULTIPLY(34,5);// 展开为: 3 4 * 5 23错误正确做法每个参数和整个表达式都要加括号#defineMULTIPLY(a,b)((a)*(b))// 正确// 展开为: ((3 4) * (5)) 352. 为什么末尾不能加分号宏函数在预处理阶段是简单的文本替换如果定义时加了分号#defineADD(a,b)((a)(b));// 错误多了一个分号// 使用时intsumADD(1,2);// 展开为: int sum ((1) (2));;// 多了一个分号可能导致编译错误inline函数的基本概念inline是一个向编译器提出的建议建议编译器在调用处展开函数体而不是进行常规的函数调用。这样可以避免函数调用的开销参数压栈、栈帧建立等。使用方法// 声明为inline函数inlineintadd(inta,intb){returnab;}// 类内定义的成员函数默认为inlineclassCalculator{public:intmultiply(intx,inty){// 默认为inlinereturnx*y;}};intmain(){intresultadd(3,4);// 编译器可能在此处展开函数体return0;}如何验证inline展开在调试模式下可以通过查看汇编代码来验证inline函数是否被展开Visual Studio调试 → 窗口 → 反汇编GCC/G使用-S选项生成汇编文件查看反汇编如果函数被inline调用处会直接是函数体的汇编指令而不是call指令inline函数的适用场景推荐使用inline的情况短小函数通常1-5行代码频繁调用的函数简单的getter/setter方法模板函数通常需要放在头文件中inline与宏函数的对比特性宏函数inline函数处理阶段预处理阶段编译阶段类型安全无类型检查有类型检查调试支持难以调试可以调试作用域全局作用域遵循作用域规则参数求值可能多次求值只求值一次代码膨胀可能较大可控总结inline函数是C中替代宏函数的更安全、更现代的选择。它提供了类型安全、可调试性和更好的代码组织同时保持了高性能。在实际开发中应该优先使用inline函数而不是宏函数让编译器根据优化策略自动决定是否内联。
延伸阅读

更多相关文章

2026/9/8 17:18:46

建筑动画:从方案可视化到城市展示的数字基建

一、什么是建筑动画? 建筑动画是通过三维技术模拟建筑空间及周边环境的动画影片类型,属于计算机生成动画范畴,基于建筑设计图纸构建虚拟场景,广泛应用于房地产宣传、工程投标、古建筑修复及城市规划领域。其核心价值在于&#xf…

2026/9/6 11:45:38

CSharp: Greedy Algorithm

项目结构:/*# encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述: Algorithms # Author : geovindu,Geovin Du 涂聚文. # IDE : vs2026 …

2026/9/9 9:00:55

AI Agent如何推动舱驾一体芯片技术革新

1. 从聊天到执行:AI Agent如何重塑汽车芯片需求格局最近两年,AI Agent技术正在经历从实验室到产业化的关键跃迁。最初我们看到的AI助手只能进行简单的对话交互,而现在的AI Agent已经能够理解复杂指令、自主规划任务流程、调用各类工具API完成…

2026/9/10 6:41:38

OpenClaw+IoT:打造真正懂你的全屋智能实战

做全屋智能这行时间长了就会发现,客户对“智能”的期待,和设备厂商对“智能”的定义,完全是两回事。大部分厂商交付的是“能控制的灯”,而客户真正想要的是一个“不用自己动手的家”。这两年我陆续落地了12个全屋智能项目&#xf…

2026/9/10 6:41:38

AI招聘的演进:从单点提效到业务重构的关键路径

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/10 6:41:37

MySQL库操作指南:建库、字符集、权限与备份全解析

1. 库操作到底在操作什么刚接触MySQL的时候,很多人第一件事就是装环境、配变量、打开命令行敲几句SQL。折腾完mysql -uroot -p能进去了,接下来自然就会问一句:然后呢?然后就是建库、建表、塞数据。这里面的“建库”就是我今天想聊…

2026/9/10 6:41:37

SSM电商实战:从分层架构到订单事务与库存扣减

简介:SSM项目鲜花销售管理系统.zip 是一套基于 SpringSpringMVCMyBatis 框架的完整 Java Web 实战项目,适合正在学习 SSM 整合、MySQL 数据库及前端 LayUI 的中高级开发者。资源共收录 637 个文件,压缩后约 22.68MB,包含 105 个 J…

2026/9/10 6:36:37

本地大模型推理CLI工具真相:llama.cpp、Ollama与LMDEPLOY实操指南

1. “magnitude”不是命令行工具,而是被误传的模型推理服务代号最近在多个技术社区和开发者群聊里,频繁看到有人搜索“magnitude CLI”“magnitude inference server”“magnitude local models”,甚至把“magnitude”和“codex cli”“claud…

2026/9/9 13:11:35

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/8 7:15:15

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/9 16:31:09

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/10 0:00:55

目录对比去重实战:用哈希算法精准清理重复文件

我电脑里现在还有一块换了三次机的“数据墓地”硬盘,里面存着2016年以前所有旧笔记本的完整备份。平时不觉得有什么,直到前阵子想把它整理归档,发现同一个安装包、同一批照片、同一份论文草稿,在几个不同的备份目录里反复出现。更…

2026/9/10 0:00:55

Leaflet离线地图完整Demo合集:内网部署与坐标纠偏实战

简介:这是一份面向Web GIS开发者的LeafLet离线地图示例合集,帮助开发者快速掌握离线地图从搭建到交互的完整流程。压缩包共723个文件,大小14.06MB,以319个js脚本、175个html页面和29个css样式文件为主体,配合png/svg图…

2026/9/10 0:00:55

MATLAB读取Rinex 3.02观测文件:多系统GNSS数据解析实战

简介:基于MATLAB开发的Rinex3.02版观测文件(o文件)读取代码包,面向卫星定位导航方向的学习者与研究人员,用于解决新版观测文件的数据解析、历元提取与时间转换问题。压缩包共4个文件,包含两个m脚本、一个19…

2026/9/7 16:23:03

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/7 22:46:00

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/9 10:21:54

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码