define 和内联函数
#define和内联函数
- 内联函数和普通函数相比可以加快程序运行的速度,因为它不需要中断,相当于直接把函数执行的代码直接复制到代码段,而宏只是一个简单的替换,而且宏还有有可能出错,一会儿为大家举个例子。
- 与宏相比,内联函数更加安全可靠,但是这是以消耗空间为代价的。如果函数代码量小可以,如果代码量大的话,就会复制过多的代码到代码区,导致过多的空间消耗,得不偿失。因此,内联函数经常用于多次被调用的短小函数,不能有for while switch等语句。
接下来是一个#define函数产生错误,而内联函数没问题的例子。
- #define MAX(a,b) (a) > (b)?(a):(b)
- result = MAX(i,j)+2;
- 由于#define 只是简单的文本替换,所以被预处理器理解为result = (a) > (b)?(a):(b) + 2;因为加号的优先级高于三目运算符,所以先算b+2会先执行。这样就是错误的。只有#define MAX(a,b) ((a) > (b)?(a):(b))才可以。
另外,内联函数做成员函数是,如果在类内直接实现的默认为内联函数。也可以在类外显示声明为inline。