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

宏与内联函数

程序员文章站 2024-03-22 19:17:28
...

宏常量
const :C++中用来替换宏
#define PI 3.14
#define PI " 3.14"
没有参数类型检测
代码运行错误,(报错位置)难以调试
C++中 const 修饰常量弥补缺乏类型检测缺点
并且具有宏替换属性

int main() 
{
	const int a = 10;
	int * pa = (int*)&a;
	*pa = 100;//const  修饰  可以通过指针来修改,正常不可以修改
	cout << a (具有宏替换属性   10   ) <<  endl;
	cout << *pa << endl;
}

宏与内联函数
宏函数
没有参数类型检测
多加括号操作(依然部分得不到想要的结果)
副作用
难以调试
如下例子:

#define MAX(left, right) ((left)>(right)? (left):(right))
int main() 
{
	int a = 10;
	int b = 20;
	cout << MAX(a, b) << endl;
	cout << MAX(++b, a) << endl;
	return 0;
}

宏与内联函数

内联函数;
inline:C++中用来替换宏
编译时C++编译器会在调用内联函数的地方展开,没有函数压栈开销,
内联函数提升程序运行的效率
具有参数检测
建议性语句(满足要求会优化,递归(多层循环)不会优化)
inline不建议声明和定义分离,分离回导致链接错误,就没有函数地址找不到了
分relese:优化
debug:优化手动设置

inline int Add(int left, int right)
{
	return left + right;
}
int main()
{
	int a = 10;
	int b = 20;
	//cout << MAX(a, b) << endl;
	//cout << MAX(++b, a) << endl;
	cout << Add(a, b) << endl;
	cout << Add(++b, a) << endl;
	return 0;
}

宏与内联函数


优点:
1.增强代码复用性
2.提高性能
缺点:
1.不方便调试(因为预编译进行了替换)
2.导致代码可读性差,可维护性差,容易误用.
3.没有类型安全的检查.