C89不支持内联函数,C99才支持。
由于inline函数具有内部链接,因此数个文件定义相同名字的内联函数不会发生冲突,而类函数宏就不行,会产生重复定义。
inline函数是真正的函数,可以由语句组成;但函数宏所做的只是替换,不是真正的函数,当然也不能有语句。
函数中的语句大于8句以上的话,一般编译器就自动将你的inline函数转化为uninline函数。
宏是把那个代码在当前位置展开,根本不用测试,肯定是最快的。
内联函数编译之后应该是把代码直接插到调用位置(应该是指编译器不优化情况下)所以执行的时候不会去压栈,调用函数代码,退栈,所以如果执行的次数多,就会比较快。
执行到非内联函数时,函数不在当前位置,是个指针,然后经历压栈,调用函数代码,退栈三个过程。会比较慢。
inline的引入大部分是为了参数类型安全检查和防止边界效应。如果是函数宏,可能有边界效应。
阅读(874) | 评论(0) | 转发(1) |