内联函数

Posted zzx1905

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内联函数相关的知识,希望对你有一定的参考价值。

内联函数,关键字inline,放在函数最前面修饰。

宏函数,预处理器处理,进行简单的文本替换,没有任何编译过程。

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include<iostream>
 3 #include<stdlib.h>
 4 
 5 using namespace std;
 6 //宏函数,预处理阶段,是文本替换,不需要数据类型
 7 //没有语法检测能力(没有编译器处理,是预处理器处理的)
 8 //‘‘为续行符
 9 #define MAX(a,b) 10     ((a)>(b)?(a):(b))
11 //这里传参如果是a++和b++,那么就会异常了,因为不能检测该语法
12 
13 
14 inline void printAB(int a, int b) {
15     cout << "a=" << a << ",b=" << b << endl;
16 }
17 
18 int main(void) {
19     int a = 10;
20     int b = 20;
21     for (int i = 0; i < 1000; i++) {
22         a++;
23         b++;
24         //定义为内联函数,编译器就会把函数体插入到调用的地方,而不是在每次循环都调用函数了
25         /*
26         {
27             cout << "a=" << a << ",b=" << b << endl;
28         }
29         1、也不是所有的内联函数都会如此,编译器会做判断,如果函数代码简单,就会采用以上的形式,
30         避免压栈、跳转、返回的额外开销;
31         2、如果函数包含了复杂的业务,那么即使定义为内联函数,编译器也还是按非内联函数处理;
32         3、在函数声明出加inline关键字定义为内联函数,并且在函数定义时也要加inline,否则编译器会直接忽略内联请求。
33         4、C++内联编译限制:
34             不能存在任何形式的循环语句、判断语句
35             函数体不能过于庞大
36             不能对函数进行取址操作
37             函数内联声明必须在调用语句之前
38         5、即使有上述限制,当函数体的执行开销远大于压栈、跳转和返回的开销时,那么内联将无意义。
39         */
40         printAB(a, b);//如果不定义为内联函数,在每调用一次就会有一次压栈、跳转、返回的过程
41     }
42     
43     system("pause");
44     return 0;
45 }

 

以上是关于内联函数的主要内容,如果未能解决你的问题,请参考以下文章

<code> vs <pre> vs <samp> 用于内联和块代码片段

内联函数知识点

实用技能分享,充分利用内联函数,内联汇编,内部函数和嵌入式汇编提升代码执行效率和便捷性(2021-12-17)

内联函数和宏比较

函数探幽

关于C++内联函数