[inline]C99中inline的使用

原创 2015年07月11日 00:18:30
   问题描述:C语言中函数调用与返回时会有部分的额外开销,如果在函数需要调用的次数非常多时,这些额外开销就会产生积累效应。C89中避免函数额外开销的唯一方式是使用带参数的宏。而C99中则提供了更好的一种方式,即内联函数inline。内联表明编译器将函数的每一次调用都用函数的机器指令来代替,但其只是建议编译器这样做,并不强制,编译器可以选择忽略。
   使用宏造成的缺陷:宏定义在形式上类似于一个函数,但在使用时,仅仅只是做简单替换,因此它不能进行参数有效性的检测,无法执行编译器严格类型检查,另外它的返回值也不能被强制转换为可转换的合适的类型。
   内联函数的使用注意:声明为内联函数的函数但没有extern时,该函数定义在该文件中是内联的,当被外部文件调用时会认为错误。如需在其他地方使用该函数,需在另一个文件中为其提供外部定义。
static inline double average(double a, double b)
{
    return(a+b)/2;
}
然后再新建一个average.h文件,
#ifndef _AVERAGE_H_
#define _AVERAGE_H_

inline double average(double a,double b)
{
   return(a+b)/2;
}
#endif
  内联函数的限制:
   函数中不能定义可改变的static变量;
   函数中不能引用具有内部链接的变量。
   内联函数一般只会用在函数内容非常简单的时候,这是因为内联函数的代码会在任何调用它的地方展开,如果函数太复杂,代码膨胀带来的恶果很可能会大于效率的提高带来的益处。
版权声明:本文为博主原创文章,未经博主允许不得转载。

GCC和C99标准中的inline

本文介绍了GCC和C99标准中inline使用上的不同之处。inline属性在使用的时候,要注意以下两点: inline关键字在GCC参考文档中仅有对其使用在函数定义(Definit...
  • Decisiveness
  • Decisiveness
  • 2015年03月09日 17:41
  • 1054

C语言inline详细讲解

C语言inline详细讲解 原帖链接:http://www.cnblogs.com/cnmaizi/archive/2011/01/19/1939686.html 本文介绍了GCC和C99标准中in...
  • force_eagle
  • force_eagle
  • 2013年09月05日 09:19
  • 3481

小问题大思考之C++里的inline函数

inline,一个神奇的关键字。有了它,函数,你同时就可以获取函数和宏的优点。inline定义的函数,比起没有inline的函数来说,没有执行函数调用所带来的负担(对此可参见《C++程序的内存布局》)...
  • imyfriend
  • imyfriend
  • 2013年10月13日 11:51
  • 8046

C++ inline函数和template函数

由于inline函数和template函数之间有些相同的特点,因此在学习C++的时候经常弄混inline函数和template函数的一些特点,读过Effective C++后对两者的概念有了较清楚的了...
  • lyh642784803
  • lyh642784803
  • 2016年05月20日 15:06
  • 1092

keil MDK开发STM32使用内联函数

笔者在做移植时,将Embest IDE环境下的例程移到REALVIEW MDK的过程中,曾经遇到这样一个问题:在生成工程时,编译全部通过,但在链接时提示许多符号未定义!如果读者也遇到过这个问题,请继续...
  • u010076999
  • u010076999
  • 2016年03月29日 16:12
  • 2890

关于inline的用法

C++中引入了关键字inline,我们称之为内联函数; 内联函数的作用体现在对于频繁调用的小函数上,太长代码的函数显然不适合声明为内联函数,这无疑会加大内存的消耗。 eg:#include ...
  • reylen
  • reylen
  • 2015年07月13日 09:10
  • 1128

c++ inlineing内联函数不要使用static对象

我们知道inline内联函数的效率比一半函数的效率要高,而在绝大部分的c+编译器将函数优化为内联函数。而内联函数是不是万能的呢?如果与内联函数与static对象结合使用会出现什么样的效果呢?下面将具体...
  • dqjyong
  • dqjyong
  • 2012年09月16日 16:28
  • 1619

java 代码细节(Inline Method)

这个观点来自《重构-----改善既有代码的设计》 A method’s body is just as clear as its name. 02 Put the method’...
  • jianguo_liao19840726
  • jianguo_liao19840726
  • 2013年06月11日 21:59
  • 916

深入理解内联inline函数的优缺点,性能及使用指南

Inline function is the optimization technique used by the compilers. One can simply prepend inline k...
  • acs713
  • acs713
  • 2015年01月12日 21:19
  • 4384

C++模板的编译与连接及inline 和 static 的说明

C++的编译是以.cpp文件为单位进行。编译之前存在一个预处理的过程:文件包含,条件编译和宏展开。文件包含是将include 的头文件中的内容复制到.cpp文件中。一般接口与实现的分离设计,头文件中通...
  • zhouguoqionghai
  • zhouguoqionghai
  • 2015年11月17日 18:28
  • 3351
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[inline]C99中inline的使用
举报原因:
原因补充:

(最多只允许输入30个字)