欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【C++】inline函数与普通函数、宏、static修饰的函数的区别

程序员文章站 2024-03-21 10:09:10
...

inline函数(内联函数)

把代码在函数的调用点直接展开。

定义:将规模小,而使用频繁的函数声明为内联函数。(在编译时将所调用函数的代码直接嵌入到主调函数中,而不是将流程传出去

注意事项:

①写在头文件下;

②只在release版本生效;

③建议:循环、递归、switch一定不会出现inline;

④加在声明点一定无效,因为inline是基于实现的,不是基于声明的。

#include <iostream>
int Sum(int, int);//[email protected]@[email protected]    *UND*
inline int Sum(int a, int b)  //[email protected]@[email protected] .text
{
	return a + b;
}

inline void Print(int arr[], int len)
{
	if (len <= 0)
		return;
	Print(arr, len - 1);
	cout << arr[len - 1] << " ";
}
int main()
{
	Sum(10, 20);  // 10 + 20;
	int arr[] = { 231, 3, 12, 3, 12, 1 };
	int len = sizeof(arr) / sizeof(arr[0]);
	Print(arr, len);
	return 0;
}

1、inline与普通函数的区别

① 普通函数调用需要开辟栈帧和回收栈帧(清栈),内联函数不开辟和回收栈帧,在调用出展开代码

②普通函数会在编译完生成函数名对应的符号,链接的时候在符号表上可以找到,内联函数不生成符号

③内联函数可以放在头文件中,方便调用,但是普通函数放在头文件中,多个文件编译用到一个头文件,可能会产生函数的重定义
 

2、inline与static修饰的函数的区别

①二者都只在当前文件可见;

②static修饰变量或者函数,inline只修饰函数

static修饰的函数的作用:

调用这个函数不会访问或者修改任何对象数据成员

static函数与普通函数的区别:

        用static修饰的函数,本限定在本源码文件中,不能被本源码文件以外的代码文件调用。而普通的函数,默认是extern的,可以被其它代码文件调用该函数。
  在函数的返回类型前加上关键字static,函数就被定义成为静态函数。普通 函数的定义和声明默认情况下是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用

因此定义静态函数有以下优点:
  <1> 其他文件中可以定义相同名字的函数,不会发生冲突。
  <2> 静态函数不能被其他文件所用。

3、inline与宏的区别

1.宏在预编译阶段进行字符替换,没有安全检查,内联函数在编译阶段展开,编译阶段有安全检查,内联函数相对宏更安全

2.宏无法调试,内联函数可以调试

3.内联是一种更安全的宏