`
caoruntao
  • 浏览: 468066 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

inline在c中的用法

阅读更多

【转】http://www.abc188.com/info/html/chengxusheji/C-C--/20080224/9676.html

 

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

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


下面我们来看一个例子

#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&C++中 一、inline 关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义。 表达式形式的宏定义一例: #define ExpressionName(Var1,Var2) ((Var1)+(Var2))*((Var1)-(Var2))为...

    详解C++中的inline用法

    在c/c++中,为了解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题,特别的引入了inline修饰符,表示为内联函数。 栈空间就是指放置程序的局部数据(也就是函数内数据)的内存空间。 在系统下,栈空间是有限...

    CSS属性display:inline-block用法深入理解

    本文向大家描述一下CSS属性display:inline-block的用法,它可以将对象呈递为内联对象,但是对象的内容作为块对象呈递,旁边的内联对象会被呈递在同一行内,允许空格。但对于这个属性不是所有浏览器都识别,支持的...

    c++中inline的用法分析

    在函数声明或定义中函数返回类型前加上关键字inline即把min()指定为内联。 inline int min(int first, int secend) {/****/};inline函数对编译器而言必须是可见的,以便它能够在调用点内展开该函数。与非inline...

    c++中的内联函数inline用法实例

    如果在类中未给出成员函数定义,而又想内联该函数的话,那在类外要加上 inline,否则就认为不是内联的。内联函数的inline要加在函数前面,不可以加在声明前面。 class A { public:void Foo(int x, int y) { } // ...

    C面试题集锦——准备面试笔试必备

    这个操作符存在C语言中的原因是它使得编译器能产生比if-then-else更优化的代码,了解这个用法是很重要的。 3). 懂得在宏中小心地把参数用括号括起来 4). 我也用这个问题开始讨论宏的副作用,例如:当你写下面的...

    23道常见的C语言面试题

    文档内容涵盖了const关键字的使用、指针常量与常量指针的区别、static关键字的作用、全局变量与局部变量的区分、宏定义的作用、内存对齐的概念、inline内联函数的特点、C语言实现面向对象特性的方法、memcpy函数的...

    C与C++笔试面试常考终极秘籍

    1.交换两个变量的值,不使用第三个变量。即a=3,b=5,交换之后a=5,b=3; 答案:有两种解法, 一种用算术算法, 一种用...3.对于一个频繁使用的短小函数,在C语言中应用什么实现,在C++中应用什么实现? c用宏定义,c++用inline

    (二)就业模拟测试题-LINUX应用开发工程师职位

    因为在 嵌入(inline)操作符 变为标准C的一部分之前,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能达到要求的性能,嵌入代码经常是必须的方法。2)三重条件操作符的知识。这个操作符存在C语言中的原因...

    css之display属性之inline-block布局实现详解

    DOCTYPE,则 Internet Explorer 8 (以及更高版本)支持属性值 "inline-table"、"run-in"、"table"、"table-caption"、"table-cell"、"table-column"、"table-column-group"、"table-row"、"table-row-group"、以及 ...

    如何解决C语言,函数名与宏冲突

    您可能感兴趣的文章:详解C语言中的#define宏定义命令用法简单讲解C语言中宏的定义与使用如何在C语言的宏中使用类型关键字C语言中的内联函数(inline)与宏定义(#define)详细解析C语言中宏定义使用的小细节C语言宏定义...

    sass-inline-svg-image:SASS 内联 SVG 图像 + 可选更改背景填充

    内联 svg 图像 将 svg 图像的内容直接嵌入到样式表中。 对于小图像,这可能是以生成更大的 CSS 文件为代价的性能优势。... sass --compass --require '../../inline-svg-image.rb' sass/example.sass > css/example.c

    一些C面试题,希望能对大家有帮助

    2.对于一个频繁使用的短小函数,在C语言中应用什么实现,在C++中应用什么实现? c用宏定义,c++用inline 3.直接链接两个信令点的一组链路称作什么? PPP点到点连接 4.接入网用的是什么接口? 5.voip都用了那些协议? 6....

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar )

    4.3 数据输入输出的概念及在 C 语言中的实现 54 4.4 字符数据的输入输出 54 4.4.1 putchar 函数(字符输出函数) 54 4.4.2 getchar函数(键盘输入函数) 55 4.5 格式输入与输出 55 4.5.1 printf 函数(格式输出函数...

    discourse-inline-icons:将 Font Awesome 图标添加到内嵌文本

    用法在您的帖子中,用[fa-iconname]文本[fa-iconname] 。 C安装将插件的 repo url 添加到容器的 yml 配置文件中 hooks : after_code : - exec : cd : $home/plugins cmd : - mkdir -p plugins - git clone ...

    C学习深入学习总结

    2.6 你是否知道auto、extern、register、volatile、restrict、inline的用法? 6 3 const 6 3.1 你是否经常使用const来表明不能够被更改的变量? 6 3.2 你是否经常使用const常量来代替宏? 6 3.3 下面四种情况,你...

    NodeAndLink.rar

    Qt 场景、视图、项应用实例,Qt整套源码,喜欢请下载: Link: #include class Node; class Link : public QGraphicsLineItem { public: Link(Node *formN, Node *toN); ~Link(); inline Node *formNode()...

    inline-chunk-manifest-html-webpack-plugin:用于html-webpack-plugin的扩展插件,用于内联webpack的块清单。 头标签中的默认内联

    标记中的内联。 输出示例 用于分配全局webpack清单变量的脚本标记,注入到<head> 。 < head > < script > window . webpackManifest = { "0" : "0.bcca8d49c0f671a4afb6.dev.js" , "1" : "1....

    css中display和visibility的用法和区别介绍

    Display的属性值 block:/*表现为一个块级元素(一般情况下独占一行)*/当display被设置为block(块)时,容器中所有的元素将会被当作一个单独的块,就像元素一样,它会在那个点被放入到页面中。(实际上你可以设置的...

Global site tag (gtag.js) - Google Analytics