inline关键字和宏函数的异同

C++ | 对比inline内联函数和宏的不同点 C语言的宏与C++的内联函数有和不同,王者荣耀安装包为何这么大,本文告诉你 阅读详情

相同点:

1.减少了函数调用的开销

不同点:

1.内联函数在编译时会进行语法检查,检查有没有语法错误之类的,而宏函数直接替换
2.替换发生的时期也不同,内联函数是在编译时展开,而宏函数是在预编译时展开
3.宏在处理时需要注意二意性问题(由大括号引起的语意不同,这是为什么有些宏函数会加do{…}while(0)的原因),而内联函数则不需要(因为语法和普通函数相同)
4.当函数的代码比较复杂时,所声明的内联函数在编译器实施时不一定会展开代码,而宏函数会照旧(编译器会衡量调用函数的开销以及直接展开的开销)

最后在使用内联函数时有一点需要注意:内联函数的声明和定义最好都在头文件中,因为编译器在处理内联函数时,需要在调用处直接展开函数。
比如如下代码:
inline_demo.h

#include <iostream>
using namespace std;

inline void test();

inline_demo.cpp:

#include "inline_demo.h"
inline void test()
{
    cout << "inline function" << endl;
}

inline_demo1.cpp:

#include "inline_demo.h"
void func()
{
    test();
}
int main()
{
    func();
    return 0;
}

输入g++ inline_demo.cpp inline_demo1.cpp -o demo编译会提示错误:对‘test()’未定义的引用。
这时我们将test()的定义也放在头文件中,再次编译就通过了。

inline和宏的区别 文章目录1 介绍1.1 内联函数1.2 宏2 区别Reference 1 介绍 1.1 内联函数 内联函数(inline)的使用目的是为了避免函数调用的开销,而将其在每个调用点上“inline”地展开。 例如: // 内联函数, 寻找两个string中较短的那个 inline const string& shorterString(const string& s1, const string& s2) { return s1.size() <= s2.size() ? s1 阅读详情

相关推荐

Windows域账户无管理员权限也能装软件?3步搞定UAC设置(附安全提醒)

本文探讨了在Windows域环境中,如何通过配置用户账户控制(UAC)实现临时提权,让无管理员权限的域账户也能安装软件。文章详细介绍了三步走策略:临时加入本地管理员组、调整UAC行为以及至关重要的权限回收,并提供了脚本化部署方案与安全实践指南,旨在平衡企业IT管理的效率与安全。

fox11的博客 756

内联函数和宏定义函数的区别

1、不同点: 内联函数是在编译时展开,而宏在预编译时展开;在编译的时候,内联函数直接被嵌入到目标代码中去,而宏只是一个简单的文本替换。 内联函数可以进行诸如类型安全检查、语句是否正确等编译功能,宏不具有这样的功能;宏不是函数,而inline是函数。 宏在定义时要小心处理宏参数,一般用括号括起来,否则容易出现二义性。而内联函数不会出现二义性。 inline有点类似于宏定义,但是它和宏定义不同...

jiechuhoudeshang的博客 1万+

薄膜电容寿命预测全解析:从理论到实践,5步搞定可靠性评估

本文全面解析薄膜电容寿命预测的理论与实践,提供五步可靠性评估流程,涵盖温度应力、电压应力等关键因素分析,并分享提升寿命的实用技巧。特别适用于新能源、电动汽车等领域的设计工程师,帮助准确预测薄膜电容在实际工况下的使用寿命。

weixin_33712987的博客 432

inline和宏定义的区别

inline和宏定义的区别

qhu1600417010的博客 478

【CarMaker实战指南】从零构建环形测试场景与车辆连续仿真

本文详细介绍了如何使用CarMaker软件从零构建环形测试场景与实现车辆连续仿真。通过分步指导搭建闭环道路、连接交叉路口、规划车辆轨迹等核心操作,帮助用户掌握CarMaker的基础应用技巧,并提供了常见问题排查与进阶优化建议,适用于车辆耐久性测试和自动驾驶算法验证等场景。

weixin_29274969的博客 234

VLA-JEPA:具身智能中潜空间世界模型的工程落地实践

世界模型是具身智能实现环境理解与因果推演的核心基础,其本质是在状态空间中建模‘动作→结果’的动力学规律。传统基于像素或文本的世界模型因高维、非平稳、弱语义等缺陷,在真实机器人场景中鲁棒性差、部署成本高。JEPA(联合嵌入预测架构)通过构建物理约束的潜空间,将视觉-语言-动作(VLA)信号统一编码为低维、可微、可解释的状态表征,显著提升模型对抖动、遮挡、光照突变等干扰的适应能力,并支持实时闭环控制。该范式已在UR5e、Franka等多构型机械臂及Jetson边缘平台完成实测验证,成为VLA系统从实验室走向产线

weixin_34357928的博客 336

inline与宏、函数之间的区别

(1)inline函数代码是被放到符号表中,使用时像宏一样展开,没有调用的开销效率很高;(2)inline函数是真正的函数,所以要进行一系列的数据类型检查;(3)inline函数作为类的成员函数,可以使用类的保护成员及私有成员;(1)内联函数在编译时展开,宏在预编译时展开;(2)内联函数直接嵌入到目标代码中,宏是简单的做文本替换;(3)内联函数有类型检测、语法判断等功能,而宏没有;(4)inline函数是函数,宏不是;(5)宏定义时要注意书写(参数要括起来)否则容易出现歧义,内联函数不会产生歧义;

StudyWinter的博客 463

3线SWD接线终极指南:用Jlink调试非3.3V设备的5个关键细节

本文详细解析了使用Jlink调试非3.3V设备时,3线SWD接线的5个关键细节。核心在于正确理解并连接Vref引脚以实现电压适配,避免供电冲突,并掌握精简接线法与固件修复技巧。文章以STM32F205等芯片为例,指导开发者安全、高效地进行混合电压调试。

e4f5g6h7的博客 437

inline 和 宏定义 区别

目录宏定义内联函数区别 宏定义 关键字 define。 1、定义常用的不变的量。如: #define PI 3.14 2、定义小的函数。如: #define product(x) x*x 3、防止头文件被重复包含 #ifndef CODE_H #define CODE_H /** * */ #endif !!!注意事项!!! 宏定义本质只是简单的文本替换,发生在预处理阶段!!! 所以 如果有下列定义: #define product(x) x+x 然后使用为 product(1) *

weixin_45146520的博客 1692

Tiff、jpg图片怎么样添加地理坐标信息

Tiff、jpg图片怎么样添加地理坐标信息 一般,外业调查只有地图资料,如专题图、或者地形图,如何把这些地图资料的扫描地图带上坐标信息,从而内业实现信息化处理?以上问题,可以解决,但根据不同情况有不同的处理方法。     第一种,上面有经纬度外框,图片是矩形,但是没有地理信息。 通过图框的两个角的坐标确定范围,分别是左上(140°E,30°N);右下(150°W,30°N) 解决方

树木_xzw的博客 2万+

ArcGIS基础实战:面数据拓扑创建和错误修改全流程

通过下图的操作我们可以发现,图层的【Shape_Length】和【Shape_Area】字段的数值都发生了改变,表明两个图层重叠的那一部分图斑合并到另一个图班上,其面积会减小、长度会变大(自己重新计算一下也可以得到此验证结果的)。如图【拓扑实验结果】文件夹里右键,新建【文件地理数据库】,并进行命名为【xx拓扑检查】备注:养成良好的命名习惯。然后在【xx拓扑检查】下右键打开【新建要素数据集】,并对数据集进行命名为【XX拓扑】,然后进行下一步设置。在【KK拓扑】数据集上右键,新建【拓扑】。

yuanYW7556的博客 1万+

C++入门讲解(超详细!!!)建议收藏!!!

本文系统介绍了C++相较于C语言的核心扩展特性,通过对比分析帮助读者理解C++的设计哲学。主要内容包括:1) C++兼容C但引入命名空间解决标识符冲突;2) 函数缺省参数和重载机制增强灵活性;3) 引用作为安全别名替代部分指针功能;4) 内联函数优化宏函数;5) nullptr提升类型安全性。文章采用实例演示和汇编分析,阐明这些特性如何支持更高效的编程范式,为后续面向对象和泛型编程奠定基础。适合具备C语言基础的开发者系统学习C++核心概念。

2501_93749616的博客 3402

webrtc进阶-- FlexFEC 实现原理与调试分析(m80 代码对齐版)

WebRTC 中 FlexFEC 技术解析与调试指南 摘要:本文深入分析 WebRTC 的 FlexFEC(灵活前向纠错)技术实现原理,重点探讨其在 m80 版本中的协商机制、接收侧恢复流程以及 SFU 场景下的特殊处理。文章指出 FlexFEC 通过动态冗余策略提升弱网抗丢包能力,详细解析了编解码器分配、SSRC 映射、包恢复等关键环节,并提供了针对 XR+SFU 场景的调试建议。调试时可重点关注 FEC 包接收与媒体包恢复日志,以验证链路有效性。

HOSTEN的博客 48

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

C++ 面试高频考点全解析:指针、引用、static、struct 一文搞懂

指针是存储变量地址的变量,64位系统中占8字节。它可动态改变指向,支持空值、多级,与引用相比,引用不可变、不占内存、不可为空。常量指针指向常量内容,指针常量指向固定地址。函数指针指向函数,指针函数返回指针。引用传参避免拷贝开销。智能指针(unique_ptr、shared_ptr、weak_ptr)实现自动内存管理,解决裸指针泄漏问题。虚析构保证基类析构调用派生类析构,防止资源泄露。C++通过封装、继承、多态实现面向对象编程,使用模板、lambda、move语义等提升效率与安全性。

qq_56483923的博客 107

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

inline函数和宏函数的区别

转自:http://blogt.chinaunix.net/space.php?uid=25213672&do=blog&id=125451 #define TABLE_COMP(x) ((x)>0?(x):0)  就定义了一个宏。  为什么要使用宏呢?因为函数的调用必须要将程序执行的顺序转移到函数所存放 在内存中的某个地址,将函数的程序内容执行完后,再返回到转去执行该

皮帽子 1万+

inline函数和宏定义区别 整理

本文转自http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=29235952&id=4206608    内联函数和普通函数相比可以加快程序运行的速度,因为不需要中断调用,在编译的时候内联函数可以直接呗镶嵌到目标代码中。内联函数要做参数类型检查,这是内联函数跟宏相比的优势。    inline是指嵌入代码,就是在调用函数的地方不是跳转

Tony的博客 7901

C++ inline函数与宏定义的区别

内联(inline)函数 通过inline关键字将函数指定为内联函数,通常就是将它在每个调用点上“内联地”展开(将函数体有关代码嵌入到调用处)。 举个例子: //寻找两个string对象中较短的那个 inline const string & shortString(const string &s1, const string &s2) { return s...

Magnum的博客 1169

宏和inline函数的区别

宏纯粹是字符的替换,没有类型检查,十分不安全。内联函数有类型检查,更加安全。 宏无法调试,而内联函数可以调试。 宏不方便阅读源码,内联函数和普通函数一样,可以阅读源码。 用宏代替函数定义,还是有函数调用的开销。但是内联函数在函数调用点处展开,节省了函数调用的开销。 ...

请给我一支兰州 558

面试题—宏、函数、宏函数、inline函数的区别与联系

--宏和函数: 。宏其实主要是进行字符串的替换(只是进行字符串的替换,不涉及类型参数),而函数是通过参数的传递,参数是有数据类型的。 。编译器在预处理阶段就会进行宏的替换,不会进行参数的检查,而函数调用是将值传递给形参(值传递、引用传递、指针传递),在编译阶段之后,执行函数是会对参数进行检查的。解释:例如:#define MAX 1000...

weixin_33834679的博客 208

inline 和 宏定义的区别

inline函数是C++引入的机制,目的是解决使用宏定义的一些缺点。 1.为什么要引入内联函数(内联函数的作用)   用它替代宏定义,消除宏定义的缺点。宏定义使用预处理器实现,做一些简单的字符替换因此不能进行参数有效性的检测。另外它的返回值不能被强制转换为可转换的合适类型,且C++中引入了类及类的访问控制,在涉及到类的保护成员和私有成员就不能用宏定义来操作。 2.inline相比

qin_zhu的专栏 585

C++ 内联函数(内附google C++风格指南)

1.内联函数 在C++中我们通常定义以下函数来求两个整数的最大值: int max(int a, int b) { return a &amp;amp;amp;gt; b ? a : b; }1234 为这么一个小的操作定义一个函数的好处有: ① 阅读和理解函数 max 的调用,要比读一条等价的条件表达式并解释它的含义要容易得...

qq_33982232的博客 322

inline的使用

inline可以看成是函数的宏展开 在c/c++中,为了解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题,特别的引入了inline修饰符,表示为内联函数,栈空间就是指放置程序的局部数据(也就是函数内数据)的内存空间。在系统下,栈空间是有限的,假如频繁大量的使用就会造成因栈空间不足而导致程序出错的问题,如,函数的死循环递归调用的最终结果就是导致栈内存空间枯竭。 #include &lt...

weixin_30505485的博客 157

C++:inline

inline inline是C++提供的一个关键字,它用于函数定义之前,表示把函数定义为内联函数。内联函数的含义是:在函数调用点把函数体直接展开,取代函数调用。 inline int getZero() { return 0; } int a = getZero(); 如果上述函数没有定义为inline,那么在声明a时,程序实际上的工作是,把getZero()函数压入栈中,执行函...

weixin_30378311的博客 190
上一篇: static关键字在C/C++中的作用(详解)
下一篇: 谨防fork与锁之间的深坑
UKey_
博客等级 码龄10年 258粉丝 186原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值