`
yangyou230
  • 浏览: 1651686 次
文章分类
社区版块
存档分类

C语言中inline的用法

 
阅读更多

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

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


下面我们来看一个例子


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

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

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

相关推荐

    C/C++中static,const,inline三种关键字详细总结

    一、关于staticstatic 是C++中很常用的修饰符,它被用来控制变量的存储方式和可见性,下面我将从 static 修饰符的产生原因、作用谈起,全面...最容易想到的方法是定义一个全局的变量,但定义为一个全局变量有许多缺点

    深入C++中inline关键字的使用

    首先谈一下在C中使用这种形式宏定义的原因,C语言是一个效率很高的语言,这种宏定义在形式及使用上像一个函数,但它使用预处理器实现,没有了参数压栈,代码生成 等一系列的操作,因此,效率很高,这是它在C中被使用...

    23道常见的C语言面试题

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

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

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

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

    3.5.4 字符数据在内存中的存储形式及使用方法 41 3.5.5 字符串常量 41 3.5.6 符号常量 42 3.6 变量赋初值 42 3.7 各类数值型数据之间的混合运算 43 3.8 算术运算符和算术表达式 44 3.8.1 C运算符简介 44 3.8.2 算术...

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

    3.5.4 字符数据在内存中的存储形式及使用方法 41 3.5.5 字符串常量 41 3.5.6 符号常量 42 3.6 变量赋初值 42 3.7 各类数值型数据之间的混合运算 43 3.8 算术运算符和算术表达式 44 3.8.1 C运算符简介 44 3.8.2 算术...

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

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

    C学习深入学习总结

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

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

    这个操作符存在C语言中的原因是它使得编译器能产生比if-then-else更优化的代码,了解这个用法是很重要的。3) 懂得在宏中小心地把参数用括号括起来 2.用预处理指令#define 声明一个常数,用以表明1年中有多少秒[2分]...

    天书夜谈:从汇编语言到Windows内核编程

    如果读者从未接触过Windows内核编程,本部分将指导读者开始Windows内核编程,学会使用WDK,并熟悉内核编程的习惯与方法。  第4章 内核字符串与内存 38  4.1 字符串的处理 39  4.1.1 使用字符串结构 39  4.1.2 ...

    天书夜读:从汇编语言到Windows内核编程(完整版一)

    如果读者从未接触过Windows内核编程,本部分将指导读者开始Windows内核编程,学会使用WDK,并熟悉内核编程的习惯与方法。  第4章 内核字符串与内存 38  4.1 字符串的处理 39  4.1.1 使用字符串结构 39  4.1.2 ...

    天书夜读:从汇编语言到Windows内核编程(完整版 二)

    如果读者从未接触过Windows内核编程,本部分将指导读者开始Windows内核编程,学会使用WDK,并熟悉内核编程的习惯与方法。  第4章 内核字符串与内存 38  4.1 字符串的处理 39  4.1.1 使用字符串结构 39  4.1.2 ...

    新手学习C++入门资料

    在C语言中,输入输出是使用语句scanf()和printf()来实现的,而C++中是使用类来实现的。 #include iostream.h main() //C++中main()函数默认为int型,而C语言中默认为void型。 { int a; cout; cin>>a; /*输入...

    peg:Peg,解析表达式语法,是Packrat解析器生成器的实现

    (因此称为peg )是一种创建语法的方法,该语法在原理上类似于但可以实现更好的代码集成。 具体而言, peg是解析器生成器的一种实现,该生成器最初由在C中实现为 leg。Packrat解析器是一种“下降递归解析器”,能够...

    Vivado HLS 视频课程总结

    5.1 C语言支持的数据类型 15 5.2 sizeof()函数使用 16 5.3 设置Visual Studio支持任意精度数据类型 17 6 数组类型转换 17 6.1 变量的定义和初始化 17 6.2 定点数据类型 18 6.3 浮点数据类型的定义和初始化 19 6.4 ...

    传智播客_C++基础课程讲义_v1.0.7

    3.3.5继承中的同名成员变量处理方法 6 3.3.6派生类中的static关键字 6 3.4多继承 6 3.4.1多继承的应用 6 3.4.2虚继承 6 3.5继承总结 6 4、多态 6 4.1多态 6 4.1.1问题引出 6 4.1.2面向对象新需求 6 4.1.3解决方案 6 ...

    我的编程感悟(中文PDF)(共37M二分卷)分卷二

    7.2.3 SIMD技术在C语言环境下的使用 196 7.2.4 MMX 编码技巧 197 7.2.5 SIMD 的应用举例 201 7.2.6 SIMD编程注意要点 203 7.2.7 SIMD的性能检测 204 第8章 引擎中的优化 205 8.1 Blit的优化 207 8.2 脏矩形优化 209 ...

    我的编程感悟(中文PDF)(共37M二分卷)分卷一

    7.2.3 SIMD技术在C语言环境下的使用 196 7.2.4 MMX 编码技巧 197 7.2.5 SIMD 的应用举例 201 7.2.6 SIMD编程注意要点 203 7.2.7 SIMD的性能检测 204 第8章 引擎中的优化 205 8.1 Blit的优化 207 8.2 脏矩形优化 209 ...

    AT&T Assembly Language

    详细的揭示了linux下的AT&T汇编指令使用方法,给出了各种汇编指令,指令用法,以及相应的例程。其中包括一些如何使用汇编链接C语言库,汇编调用系统调用,汇编执行浮点运算,C语言内嵌汇编等。 Chapter 1: What Is ...

Global site tag (gtag.js) - Google Analytics