宏常量与inline函数
在C/C++中,函数调用要有一定的时间和空间方面的开销,于是影响其效率,而宏只是在预处理的地方把代码展开,不需要额外的空间和时间方面的开销,所以调用一个宏比调用函数更有效率。但是宏常量也有其不足的地方:1.宏不能访问对象的私有成员;2.宏的定义很容易产生二义性。内联函数和宏的区别在于,宏是由预处理器对宏进行替代,而内联函数是通过编译器控制来实现的。而且内联函数是真正的函数,只是在需要的时候,内联函数像宏一样展开,所以取消了函数的参数压栈,减少了调用的开销。你可以像调用函数一样来调用内联函数,而不必担心会产生处理宏所出现的问题。当然,inline函数不可能完全取代宏,用宏来构造一些重复的、数据和函数混合的、功能较特殊的代码段的时候,其优点就显示出来了。
const常量与宏常量
const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行静态类型安全检查,而后者只进行字符替换,没有类型安全检查,并且在字符替换时可能会产生意料不到的错误(边际效应)。有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试。
阅读(1719) | 评论(0) | 转发(0) |