码迷,mamicode.com
首页 > 其他好文 > 详细

内联函数

时间:2018-11-29 23:13:55      阅读:254      评论:0      收藏:0      [点我收藏+]

标签:异常   fine   ios   end   文本   main   预处理   类型   span   

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

 

内联函数

标签:异常   fine   ios   end   文本   main   预处理   类型   span   

原文地址:https://www.cnblogs.com/zzx1905/p/inline.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!