宏与内联函数
程序员文章站
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.没有类型安全的检查.