博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

(转)内联函数和宏定义的差别

Posted on 2011-04-01 16:26  ¥忘%风  阅读(2435)  评论(0编辑  收藏  举报

(转自博客园)原文链接:内联函数与宏定义的差别


内联函数和普通函数相比可以加快程序运行的速度,因为不需要中断调用,在编译的时候内联函数可以直接呗镶嵌到目标代码中。

内联函数要做参数类型检查,这是内联函数跟宏相比的优势。

inline是指嵌入代码,就是在调用函数的地方不是跳转,而是把代码直接写到那里去。对于短小的代码来说,inline可以带来一定的效率提升,

而且和C时代的宏函数相比,inline更安全可靠。可是这个以增加空间消耗为代价的。至于是否需要inline函数就需要根据你的实际情况取舍了。

  inline一般只用于如下情况:

  (1)一个函数不断被重复调用。

  (2)函数只有简单的几行,且函数不包含for、while、switch语句。

  一般来说,我们写小程序没有必要定义成inline,但是如果要完成一个工程项目,当一个简单函数被调用多次时,则应该考虑用inline。

   宏在C语言里极其重要,而在C++里用得就少多了。关于宏的第一规则是:绝不应该去使用它,除非你不得不这样做。几乎每个宏

   都表明了程序设计语言里或者程序里或者程序员的一个缺陷,因为它将在编译器看到程序的正文之前重新摆布这些正文。宏也许

   是许多程序设计工具的麻烦。所以,如果你使用了宏,你就应该准备着只能从各种工具(如排错系统、交叉引用系统、轮廓程序等)

     中得到较少的服务。(--pass:宏还是很方便的,使用时要小心,并不是说宏一无是处,存在自然有其合理性)


  宏是在代码处不加任何验证的简单替代,而内联函数是将代码直接插入调用处,而减少了普通函数调用时的资源消耗。

  宏不是函数,只是在编译前(编译预处理阶段)将程序中有关字符串替换成宏体。

  inline函数是函数,但在编译中不单独产生代码,而是将有关代码嵌入到调用处。

 

inline fact(float i) { return i * i; } // 没有写返回值的
printf("bb= %d", fact(8)); // 调用时就是执行printf("bb= %d", 8*8);