C++入门系列-内联函数

embedded/2024/10/18 16:50:29/

🌈个人主页:羽晨同学 

💫个人格言:“成为自己未来的主人~”  

以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内敛函数的地方展开,这就意味着使用内联函数可以提升程序的运行的效率,减小了调用所需要的时间。

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
int ADD(int a, int b)
{return a + b;
}
int main()
{int ret = ADD(1,2);return 0;
}

 这个是未使用inline的汇编代码的情况,我们可以看到,它这里ADD是不会进行替换的。

下面显示的代码是inline修饰后的代码,大家可以观察一下,有什么问题

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
inline int ADD(int a, int b)
{return a + b;
}
int main()
{int ret = ADD(1,2);return 0;
}

 我们可以看到在使用了inline之后,ADD函数就进行了替换。

特性

Inline是一种以空间换时间的做法,如果编译器将函数当成内联函数处理,在编译阶段,会用函数体替换函数调用,缺陷:可能会使目标文件变大,优势,少了调用开销,提高程序运行效率。

inline对于编译器而言只是一个建议,不同编译器关于inline实现机制可能不同,一般建议,将函数规模小的(即函数不是很长,具体没有准确的说法,取决于编译器内部实现),不是递归,且频繁调用的函数采用inline修饰,否则编译器会忽略Inline特性。

inline不建议生命和定义分离,分离会导致链接错误,因为inline被展开,就没有函数地址了,链接就找不到了。

会显示连接错误

main.cpp

#define _CRT_SECURE_NO_WARNINGS
#include"f.h"
inline int ADD(int a, int b)
{return a + b;
}int main()
{f(10);//int ret = ADD(1,2);return 0;
}

f.h

#pragma once
#include<iostream>
using namespace std;
inline int f(int i);

f.cpp

#define _CRT_SECURE_NO_WARNINGS
#include"f.h"
int f(int i)
{return i;
}

 宏的优缺点:

优点:

增强代码的复用性

提高性能

缺点:

不方便调试宏(因为预编译阶段进行了宏替换)

导致代码可读性差,可维护性差,容易误用

没有类型安全的检查

C++有哪些结束可以替代宏

常量定义,换用const enum

短小函数定义,换用内联函数

 

 


http://www.ppmy.cn/embedded/29108.html

相关文章

深入了解 Spring Boot 的加载过程

Spring Boot 的加载过程可以大致分为以下几个阶段&#xff1a; 类加载&#xff1a;首先&#xff0c;Java 虚拟机会加载必要的类&#xff0c;包括 Spring Boot 的核心类和应用程序的相关类。配置解析&#xff1a;Spring Boot 会解析各种配置&#xff0c;如 application.properti…

链表经典面试题上

目录 创作不易&#xff0c;如若对您有帮助&#xff0c;还望三连&#xff0c;谢谢&#xff01;&#xff01;&#xff01; 题目一&#xff1a;203. 移除链表元素 - 力扣&#xff08;LeetCode&#xff09; 题目二&#xff1a;206. 反转链表 - 力扣&#xff08;LeetCode&#xff…

音频智能切换器JR-AR42-A

憬锐JR-AR42-A音频自动智能切换器(四切一)&#xff0c;具备四路模拟卡侬立体声音频输入&#xff0c;两路模拟卡侬立体声音频输出&#xff0c;其中输入第1路和输出第1路为断电直通通道。具有输入音频信号幅度判别&#xff0c;可设置门限电平和切换延时时间&#xff0c;可以根据需…

librosa 语音识别 学习笔记

目录 不错的功能介绍 librosa安装 语音识别 不错的功能介绍 librosa&#xff0c;一个很有趣的 Python 库&#xff01; - 简书 音频转特征向量 GitHub - librosa/librosa: Python library for audio and music analysis librosa安装 2024.04.27 测试ok Win11系统 pip in…

python验证输入的IP地址是否正确

目录 一.前言 二.代码 三.代码分析 一.前言 IP是一组规则,它定义了计算机网络中的设备如何通信。它是一套协议,规定了如何将数据包从一台设备发送到另一台设备。 二.代码 cause = True # 设置判断网址是否正确的标志变量为真 ip …

SAP PP学习笔记09 - 作业区(工作中心Work Center)Customize2(管理码,班次顺序,计算式),标准Text,作业区阶层

上文讲了作业区&#xff08;工作中心&#xff09;的概念及其中重要字段&#xff0c;以及作业区的部分Customize。 SAP PP学习笔记08 - 作业区&#xff08;工作中心Work Center&#xff09;&#xff0c;作业区Customize-CSDN博客 本文继续讲 作业区的Customize。 Spro > 生…

K8S执行完毕kubectl init xxx 执行 kubectl get ns 报错才connect: connection refused

问题场景&#xff1a; 在安装完毕K8S之后&#xff0c;执行 kubectl get ns 报错&#xff1a; [rootmaster ~]# kubectl get pods E0501 08:34:55.770030 11268 memcache.go:265] couldnt get current server API group list: Get "https://192.168.1.100:6443/api?ti…

云计算技术概述_1.云计算相关概念

1.关于IBM“蓝云&#xff08;Blue Cloud&#xff09;”计划 IBM 推出的“蓝云&#xff08;Blue Cloud&#xff09;”计划为客户带来即可使用的云计算(Cloud Computing)。它包括一系列的云计算产品&#xff0c;使计算不仅仅局限在本地机器或远程Server Farms&#…