0
点赞
收藏
分享

微信扫一扫

为Linux系统添加一块新硬盘,并扩展根目录容量

伢赞 2023-05-08 阅读 22

前言

目录

一、问题引入

我们每次去调用函数的时候,都会有消耗(建立栈帧等等)。假设我现在要调用100次Add函数,那么就要建立100个栈帧

在这里插入图片描述

在C语言中,为了防止如此大的消耗,我们通常用宏函数来解决问题。宏函数的优势:不需要建立栈帧,提高调用效率。

在这里插入图片描述

宏既然有优点,那一定就会有缺点(复杂、不易调试、代码可读性差),那就是特别容易书写写错误。因此,Bjarne Stroustrup大佬看不下去了,于是自创了一个新语法 — 内联函数

二、内联函数的概念

所以,在【问题引入】中,用内联函数表示方法如下:

在这里插入图片描述

通过以上代码,我们可以看出内联函数的优点是(解决了宏的缺点):
①不需要建立栈帧
②不复杂、不容易出错、可读性好、容易调试

三、内联函数的特性

  1. inline是一种以空间换时间的做法。假如有一个Func函数有50行指令,假设某个项目要调用1wFunc函数,如果不使用内联函数,就会有1w+50行指令;如果使用内联函数,在编译阶段,会用函数体替换函数调用,就会1w*50行指令,这会导致最后可执行程序(安装包)变大,谁会希望一个程序的安装包大呢?这就是代码膨胀,因此不能让所有的函数变成内联函数

  2. inline对于编译器而言只是一个建议,不同编译器关于inline实现机制可能不同,最终是否会称为inline,编译器自己决定

  1. inline不建议声明和定义分离

在这里插入图片描述

看似没错,其实程序最后会报错

在这里插入图片描述

这是因为:分离会导致链接错误。因为inline被展开,就没有函数地址了,链接就会找不到

所以内联函数的定义和声明一定要在一起

在这里插入图片描述

四、面试题

举报

相关推荐

0 条评论