news 2026/4/11 23:48:57

C语言的宏定义与C++的inline

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C语言的宏定义与C++的inline

首先明确的时,在程序的预处理时,C语言的宏定义是直接在程序中展开,而C++的inline及既可能展开,也可能不展开(取决于你的编译设置,inline内的代码数量)

先来说明C中的宏定义:

1.定义常量

#define MAX 100 —— 这就像是把 MAX 这个名称 直接当作 100 来处理

比如: int (*arr[MAX])(int,int) 这个在预处理阶段就会变成 int(*arr[100])(int,int)

值得一提的是,这个并不是只能用于替换数字,而是所有都可以进行替换,

比如 #define YOU xiaoming 在后面的阶段中YOU 都会变成 xiaoming

2.带参数的宏定义

#definename( parament-list ) stuf

值得注意的是(parament-list)应该于与name紧靠在一起,否则会被认为是stuff中的部分

e.g #define ADD(x,y) ((x)+(y)) ——这就是代表后面只要输入了ADD(x,y)就会认为是将x,y 进行相加

比如 printf("%d",ADD(3,4));——就会编译出 7

以上就是宏定义了,接下来讲一下这其中容易出现的小错误

1. #define MAX 1000;

这里的问题是这里会把 ' ; '也直接弄过去,容易出错,比如printf("%d",MAX); 在于处理时就会变成 printf("%d",1000;); 出现error

2.#define ADD(x,y) x+y

这里的问题是 ADD(3==4,5*5) —— 3 == 4+5*5 ->0,可是我想要的结果应该是 25

3.#define ADD(x,y) (x+y)

这里的问题和上面相似,

所以在写带参数的宏定义时 #define ADD(x,y) ((x)+(y)) ,参数和结果都要带();

C++中的inline

结构

inline int ADD(int x,int y )

{

return x+y;

}

调用时,和函数相似,直接调用 ADD (x,y);

e.g

int ret = ADD(3,9);

return ret;

这样设计的初衷是防止在宏定义中的出错点,毕竟要是函数能写错,也是白学了!!

相比于宏定义的无条件展开,这里inline是有一定思想的,当你的代码量超过了一定行数,就不会在预处理阶段展开,(一般在5-10)毕竟要是很长你还展开的话就有点笨了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/7 12:54:23

高效LED呼吸灯系统设计:基于PWM调光的实现方法!

实现高质量的LED呼吸灯效果,不仅需要良好的视觉表现,更需兼顾能效与系统稳定性。采用PWM调光技术,可在不牺牲亮度控制精度的前提下,显著提升电能利用率。一种基于PWM的高效LED呼吸灯系统设计方案,涵盖信号生成、驱动电…

作者头像 李华
网站建设 2026/4/11 10:30:19

大模型学习路线图:从数学基础到AGI应用全解析_AI大模型学习路线(2025最新)神仙级大模型教程分享

文章提供了大模型学习的七个阶段路线图:从数学编程基础、机器学习、深度学习到NLP和大模型应用,最后是进阶学习。文章介绍了大模型行业前景、薪资水平和学习资源,强调掌握AI技术的重要性,并提供免费学习资料包,帮助小白…

作者头像 李华
网站建设 2026/4/9 9:20:07

Open-AutoGLM API接口实战手册(从入门到高并发优化)

第一章:Open-AutoGLM API接口实战手册(从入门到高并发优化)快速接入API服务 要开始使用Open-AutoGLM API,首先需获取有效的认证密钥。注册开发者账户后,在控制台生成API Key,并通过HTTP Header传递进行身份…

作者头像 李华
网站建设 2026/4/10 17:14:20

卡帕西2025大模型回顾解读:AI的脑、手、场进化与2026前瞻

最近AI圈有一篇重磅文章——安德烈卡帕西(Andrej Karpathy)的2025年大模型回顾。 卡帕西的行业影响力毋庸置疑:2016年加入OpenAI,是早期最核心的研究员之一;2017-2022年担任特斯拉人工智能高级总监。他的观点横跨软件端…

作者头像 李华
网站建设 2026/4/8 23:52:57

告别文本低效协作:潜在空间多智能体系统(LatentMAS)全面解析

LatentMAS是一种革命性的多智能体协作框架,通过在潜在空间中直接共享智能体的内部"思维状态",而非传统文本交流,实现了高效、无损的信息交换。这种"心灵感应"式协作基于推理表达力、通信保真度和协作复杂度三大支柱&…

作者头像 李华
网站建设 2026/4/10 11:49:03

在 GeckoCIRCUITS 上开发新工具模块的方法

简介 最近在使用开源电力电子仿真软件 GeckoCIRCUITS 进行仿真时,我想使用离散时间控制器,但是 GeckoCIRCUITS 中没有这个模块,需要使用工具栏中自带的 JAVA 模块添加算法代码。但是我想把类似这样常用的模块固定在工具栏里,方便使…

作者头像 李华