内联函数和宏定义的区别
(2015-03-23 18:28:04)
标签:
股票 |
分类: 笔试和面试 |
用内联取代宏:
1.内联函数在运行时可调试,而宏定义不可以;
2.编译器会对内联函数的参数类型做安全检查或自动类型转换(同普通函数),而宏定义则不会;
3.内联函数可以访问类的成员变量,宏定义则不能;
4.在类中声明同时定义的成员函数,自动转化为内联函数。
内联函数与宏定义
在C中,常用预处理语句#define来代替一个函数定义。例如:
#define MAX(a,b) ((a)>(b)?(a):(b))
该语句使得程序中每个出现MAX(a,b)函数调用的地方都被宏定义中后面的表达式((a)>(b)?(a):(b))所替换。
宏定义语句的书写格式有过分的讲究, MAX与括号之间不能有空格,所有的参数都要
放在括号里。尽管如此,它还是有麻烦:
int a=1,b=0;
MAX(a++,b); //a被增值2次
MAX(a++,b+10); //a被增值1次
MAX(a,"Hello"); //错误地比较int和字符串,没有参数类型检查
MAX( )函数的求值会由于两个参数值的大小不同而产生不同的副作用。
MAX(a++,b)的值为2,同时a的值为3;
MAX(a++,b+10)的值为10,同时a的值为2。
如果是普通函数,则MAX(a,"HellO")会受到函数调用的检查,但此处不会因为两个参数类型不同而被编译拒之门外。幸运的是,通过一个内联函数可以得到所有宏的替换效能和
所有可预见的状态以及常规函数的类型检查:
inline int MAX(int a,int b)
{
return a>b?a:b;
}
1.内联函数与宏的区别:
2.内联函数的使用:
注意:
总结: