宏定义是对字符串的替换,所以在使用时要非常谨慎,如经典程序:
#include <iostream>
#include<stdlib.h>
using namespace std;
#define SQ(y) ((y)*(y))
int main(){
int n, sq;
cin >> n;
sq = 200 / SQ(n + 1);
cout << sq << endl;
system("pause");
return 0;
}
所以使用宏定义时,变量和表达式都要用扩号单独括起来
内联函数:即在函数定义前加上inline,使函数在调用时直接替换成函数体,这一过程在编译期间完成。所以内联函数的使用必须在同一文件中,因为先编译,后链接,编译后内联函数函数体消失,会找不到函数定义。
函数调用会占用一定的时间开销,所以对于一些短小的函数,使用内联函数,当然,大的函数使用内联函数时,编译器也会自动判断,运行时间远大于调用时间,也不会内联。
最好的是在函数声明的地方直接使用内联函数,当然你也可以声明,声明时inline可加可不加
完美例子:
#include <iostream>
#include<stdlib.h>
using namespace std;
inline int SQ(int y){ return y*y; }
int main(){
int n, sq;
cin >> n;
//SQ(n)
sq = SQ(n);
cout << sq << endl;
//SQ(n+1)
sq = SQ(n + 1);
cout << sq << endl;
//200/SQ(n+1)
sq = 200 / SQ(n + 1);
cout << sq << endl;
system("pause");
return 0;
}