C语言 inline类型函数

转载 2012年03月21日 17:57:20
 
选择inline类型的函数是有条件的
·函数足够简单,并且非常频繁被调用,只有一条程序就可以完成任务
·不能包含复杂的结构控制语句例如while switch
 
 

C 内联函数(inline)

  • 什么是内联函数
    • 内联函数是为了解决C 预处理器宏存在的问题所提出一种解决方案,用来提高函数使用效率
  • 内联函数定义
    • 内联函数使用inline关键字定义,
      并且函数体和申明必须结合在一起,
      否则编译器将他作为普通函数对待。
      • inline void function(int x); //仅仅是申明函数,没有任何效果
      • inline void function(int x) //正确
        {
        return x;
        }
    • 在类内部定义的函数自动的为内联函数,
      不需要加关键字inline。
      • class point
        {
        int i;
        public:
        void SetValue(int x) //内联函数
        {
        i = x;
        }
        }

  • 内联函数和普通函数的区别
    • 普通函数:
      编译器在它的符号表中放入函数类型(包含名字和参数类型的函数原型及函数的返回类型)。
    • 内联函数:
      函数的代码也被放入符号表,代码是以源程序形式还是以编译过的汇编指令形式存放取决于编译器。

      当内联函数太复杂,编译器将不能执行内联。

-------------------------------------------------------------
 
 
 
 
 
 
 
 
 
 
在c 中,为了解决一些频繁调用的小涵数大量消耗栈空间或者是叫栈内存的问题,特别的引入了inline修饰符,表示为内联涵数。

可能说到这里,很多人还不明白什么是栈空间,其实栈空间就是指放置程序的局部数据也就是函数内数据的内存空间,在系统下,栈空间是有限的,如果频繁大量的使用就会造成因栈空间不足所造成的程序出错的问题,涵数的死循环递归调用的最终结果就是导致栈内存空间枯竭。

下面我们来看一个例子
//程序作者:管宁
//站点:www.cndev-lab.com
//所有稿件均有版权,如要转载,请务必著名出处和作者

#include <iostream>
#include <string>
using namespace std;

inline string dbtest(int a); //函数原形声明为inline即:内联涵数


void main()
{
for (int i=1;i<=10;i )
{
cout << i << ":" << dbtest(i) << endl;
}
cin.get();

}

string dbtest(int a)//这里不用再次inline,当然加上inline也是不会出错的
{
return (a%2>0)?"奇":"偶";

}
上面的例子就是标准的内联涵数的用法,使用inline修饰带来的好处我们表面看不出来,其实在内部的工作就是在每个for循环的内部所有调用dbtest(i)的地方都换成了(i%2>0)?"奇":"偶"这样就避免了频繁调用函数对栈内存重复开辟所带来的消耗。

说到这里很多人可能会问,既然inline这么好,还不如把所谓的函数都声明成inline,嗯,这个问题是要注意的,inline的使用是有所限制的,inline只适合涵数体内代码简单的涵数使用,不能包含复杂的结构控制语句例如while switch,并且不能内联函数本身不能是直接递归函数(自己内部还调用自己的函数)。

说到这里我们不得不说一下在c语言中广泛被使用的#define语句,是的define的确也可以做到inline的这些工作,但是define是会产生副作用的,尤其是不同类型参数所导致的错误,由此可见inline有更强的约束性和能够让编译器检查出更多错误的特性,在c 中是不推荐使用define的。

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
  • 3431

C语言inline详细讲解

(原文链接:http://www.cnblogs.com/xkfz007/articles/2370640.html) 本文介绍了GCC和C99标准中inline使用上的不同之处。inline属...
  • Loving_Forever_
  • Loving_Forever_
  • 2016年06月02日 16:05
  • 1596

内联函数 —— C 中关键字 inline 用法解析

一、什么是内联函数        在C语言中,如果一些函数被频繁调用,不断地有函数入栈,即函数栈,会造成栈空间或栈内存的大量消耗,为了解决,特别的引入了inline修饰符,表示为内联函数。      ...
  • zqixiao_09
  • zqixiao_09
  • 2016年03月13日 13:37
  • 11875

C语言 inline类型函数

原文来自http://blog.chinaunix.net/space.php?uid=1835494&do=blog&id=2831760,先谢过,分析挺好的! 选择inline类...
  • Tomsen00
  • Tomsen00
  • 2012年04月27日 11:00
  • 509

C语言中的内联函数(inline)与宏定义(#define)详细解析

C语言中的内联函数(inline)与宏定义(#define)详细解析 作者: 字体:[增加 减小] 类型:转载 内联函数与宏本质上是两个不同的概念如果程序编写者对于既要求快速,又要求可读的情况下...
  • xu_ya_fei
  • xu_ya_fei
  • 2014年12月01日 16:37
  • 355

C语言里面的内联函数(inline)与宏定义(#define)探讨

C语言里面的内联函数(inline)与宏定义(#define)探讨   先简明扼要,说下关键: 1、内联函数在可读性方面与函数是相同的,而在编译时是将函数直接嵌入调用程序的主体,省去了调用/返回...
  • lianyq1986
  • lianyq1986
  • 2011年08月08日 08:55
  • 644

c语言中的的内联(inline)函数

c语言中的的内联(inline)函数发表于 2011 年 01 月 26 日 由 admin c/c++中的inline,使用在函数声明处,表示程序员请求编译器在此函数的被调用处将此函数实现插入,而...
  • LQ_14777
  • LQ_14777
  • 2017年01月17日 10:08
  • 250

C语言中__inline函数作用解释

C语言inline函数的使用方法2012-01-20 00:00 中国IT实验室 佚名 ..关键字:C语言   大学在教科书上学习过inline函数,定义为inline函数之后,会省去函数调用的开销,...
  • macrohasdefined
  • macrohasdefined
  • 2014年07月11日 15:30
  • 553

C语言inline函数使用

一、简述: inline函数,定义为inline函数之后,会省去函数调用的开销,直接嵌套汇编代码,取代函数调用,提高效率。 在函数声明或定义中函数返回类型之前加上关键字inline。 比如:inli...
  • lanhaics
  • lanhaics
  • 2014年03月14日 14:05
  • 706

C语言里面的内联函数(inline)与宏定义(#define)探讨

http://huxiongwei.spaces.eepw.com.cn/articles/article/item/85841 C语言里面的内联函数(inline)...
  • wangyin159
  • wangyin159
  • 2014年07月08日 21:06
  • 934
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言 inline类型函数
举报原因:
原因补充:

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