内联函数

内联函数,关键字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 }

 

posted @ 2018-11-29 22:26  zarjen  阅读(614)  评论(0编辑  收藏  举报