快捷搜索:  汽车  科技

c中内置函数有什么作用?C内联函数有什么作用

c中内置函数有什么作用?C内联函数有什么作用if(b > a) a = b;a = i; b = j; c = k;定义内联函数的方法很简单,只须在函数的首行的左端增加一个关键字 inline 即可。如下是一个程序测试例子:由于在定义函数时指定它为内联函数,因此,编译系统在遇到函数调用 max(i j k) 时,就用 max 函数体的代码代替 max(i j k),同时,将实参代替形参。这样,m = max(i j k) 就被置换成:{

内联函数

软件在调用、运行一个函数的时候,计算机系统需要申请内存空间,对函数参数进行压栈,函数调用完之后,数据进行出栈。

所以,频繁调用一个函数的时候,计算机系统需要频繁地申请空间,对数据进行压栈和出栈。耗费很多的系统资源。从而降低程序的执行效率。C 提供一种提高效率的方法,即在编译的时候将所调用函数的代码嵌入到主函数中。

所以,增加了代码量,但是,减少了函数调用时压栈弹栈等“时间资源”开销,所以,是一个“空间换时间”的问题。所以,空间开销增加,时间开销减少。

这种嵌入到主函数中的函数称为 内联函数(inline function),又称为 内嵌函数。

定义内联函数的方法很简单,只须在函数的首行的左端增加一个关键字 inline 即可。如下是一个程序测试例子:

c中内置函数有什么作用?C内联函数有什么作用(1)

由于在定义函数时指定它为内联函数,因此,编译系统在遇到函数调用 max(i j k) 时,就用 max 函数体的代码代替 max(i j k),同时,将实参代替形参。这样,m = max(i j k) 就被置换成:

{

a = i; b = j; c = k;

if(b > a) a = b;

if(c > a) a = c;

m = a;

}

内联函数与用 #define 命令实现的带参宏定义有些相似,但不完全相同。宏定义是在编译前由预处理程序对其预处理的,它只作简单的字符置换而不作语法检查,往往会出现意想不到的错误。

如下的例子,是用带参数宏定义实现求平方值。

c中内置函数有什么作用?C内联函数有什么作用(2)

输出的结果是:

9 --- 执行 power(3) = 3 * 3 = 9

3 --- 执行 power(1 1) = 1 1* 1 1 = 1 1 1 = 3

其实,在使用 #define 定义 power 宏的时候,应该加上相应的括号来限制,应该

#define power(x) (x*x)

这样 power(5 5) = (5 5) * (5 5) = 10 * 10 = 100

如果不用 #define ,而用内联函数,则可以避免上面的副作用:

c中内置函数有什么作用?C内联函数有什么作用(3)

可以看到:用带参宏定义和内联函数都可以实现代码的置换,但具体的做法不同,用内联函数可以达到用 #define 宏置换的目的,但不会出现带参宏定义的副作用。

显然,内联函数优于带参宏定义。自从有了内联函数之后,一般不再用 #define 带参宏定义了。

使用内联函数可以节省运行时间,但却增加了目标程序的长度。假设要调用10次 power 函数,则在编译时先后 10 次将 power的代码复制并插入到main()函数中,大大增加了main函数的长度。因此,只用于规模很小,而且,使用频繁的函数,可大大提高运行速度。

猜您喜欢: