在c中,为了解决一些频繁调用的小函数大量消耗栈空间或是叫栈内存的问题,特别的引入了inline修饰符,表示为内联函数。
栈空间就是指放置程式的局部数据也就是函数内数据的内存空间,在系统下,栈空间是有限的,假如频繁大量的使用就会造成因栈空间不足所造成的程式出错的问题,函数的死循环递归调用的最终结果就是导致栈内存空间枯竭。
下面我们来看一个例子

#include <stdio.h>
//函数定义为inline即:内联函数
inline char* dbtest(int a) {
    return (a % 2 > 0) ? "奇" : "偶";
}

int main()
{
   int i = 0;
   for (i=1; i < 100; i++) {
       printf("i:%d    奇偶性:%s \n", i, dbtest(i));

}
}

上面的例子就是标准的内联函数的用法,使用inline修饰带来的好处我们表面看不出来,其实在内部的工作就是在每个for循环的内部任何调用dbtest(i)的地方都换成了(i%2>0)?"奇":"偶"这样就避免了频繁调用函数对栈内存重复开辟所带来的消耗。
inline的使用是有所限制的,inline只适合涵数体内代码简单的涵数使用,不能包含复杂的结构控制语句例如while、switch,并且不能内联函数本身不能是直接递归函数(自己内部还调用自己的函数)。
补充:

inline函数仅仅是一个建议,对编译器的建议,所以最后能否真正内联,看编译器的意思,它如果认为函数不复杂,能在调用点展开,就会真正内联,并不是说声明了内联就会内联,声明内联只是一个建议而已.
其次,因为内联函数要在调用点展开,所以编译器必须随处可见内联函数的定义,要不然,就成了非内联函数的调用了.所以,这要求每个调用了内联函数的文件都出现了该内联函数的定义。

因此,将内联函数放在头文件里实现是合适的,省却你为每个文件实现一次的麻烦.而所以声明跟定义要一致,其实是指,如果在每个文件里都实现一次该内联函数的话,那么,最好保证每个定义都是一样的,否则,将会引起未定义的行为,即是说,如果不是每个文件里的定义都一样,那么,编译器展开的是哪一个,那要看具体的编译器而定.所以,最好将内联函数定义放在头文件中.
而类中的成员函数缺省都是内联的,如果在类定义时就在类内给出函数,那当然最好.如果在类中未给出成员函数定义,而又想内联该函数的话,那在类外要加上inline,否则就认为不是内联的.

为了方便,将内联函数直接声明时就定义,放在头文件中.这样其它文件包含了该头文件,就在每个文件都出现了内联函数的定义.就可以内联了.
————————————————
版权声明:本文为CSDN博主「lufeiop02」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lufeiop02/article/details/6526499

关于c中的inline相关推荐

  1. c语言头文件中定义inline static相关函数的优劣

    头文件中常见static inline函数,于是思考有可能遇到的问题,如头文件经常会被包含会不会产生很多副本?网上说法不一.于是自己验证.经过arm-none-eabi-gcc下测试后得出结论. in ...

  2. matlab里inline定义矩阵,Matlab中的inline函数_matlab中inline函数

    Matlab中的inline函数 1.有时为了描述某个数学函数的方便,可以用inline()函数来直接编写该函数,形式相当于M-函数,但无编写一个真正的MATLAB文件,就可以描述出某种数学关系.其调 ...

  3. Mathtype中使用inline导致word行间距不一致的问题解决方案

    Mathtype中使用inline导致word行间距不一致的问题解决方案 前言 解决方案 前言 在论文写作中遇到的一个小问题,即在word2013中,向正文文字插入mathtype的inline会导致 ...

  4. 内联函数 —— C 中关键字 inline 用法解析(转载)

    一.什么是内联函数 在C语言中,如果一些函数被频繁调用,不断地有函数入栈,即函数栈,会造成栈空间或栈内存的大量消耗. 为了解决这个问题,特别的引入了inline修饰符,表示为内联函数. 栈空间就是指放 ...

  5. 在JavaScript中使用inline函数的问题

    前段时间被IE和JavaScript脚本引擎的Memory Leak问题弄得郁闷坏了,不过幸好现在总算是柳暗花明了,并且找到了一些IE中使用脚本避免ML问题的方法.继续研究JavaScript的编写, ...

  6. C++ 中的 inline 用法

    1.引入 inline 关键字的原因 在 c/c++ 中,为了解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题,特别的引入了 inline 修饰符,表示为内联函数. 栈空间就是指放置程序的局部数 ...

  7. string类有可以调换方向的函数吗_深度剖析C++中的inline函数

    点蓝色字关注"CurryCoder" 微信公众号:CurryCoder的程序人生 怕什么真理无穷,进一寸有一寸的欢喜 1.inline函数的爱恨两难 内联函数比宏优点好很多,详细原 ...

  8. C++中的inline用法

    https://www.cnblogs.com/fnlingnzb-learner/p/6423917.html 1. 引入inline关键字的原因 在c/c++中,为了解决一些频繁调用的小函数大量消 ...

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

    一.什么是内联函数 在C语言中,如果一些函数被频繁调用,不断地有函数入栈,即函数栈,会造成栈空间或栈内存的大量消耗. 为了解决这个问题,特别的引入了inline修饰符,表示为内联函数. 栈空间就是指放 ...

最新文章

  1. 李国杰院士等:未来移动通信系统中的通信与计算融合
  2. 世界无人帆船大赛首次登陆中国,水手梦也能用代码实现
  3. python列表的嵌套,Python检查列表是否嵌套
  4. 删除链表的中间节点和a/b处的节点
  5. 读取文件:TypeError: an integer is required (got type str)
  6. 该死的MySQL乱码!
  7. 《Redis核心技术与实战》学习总结(2)
  8. 如何使得客户端和服务器端完美配合做IOS应用内付费
  9. angular监听输入框值的变化_如何检测Angular中@Input()值何时发生变化?
  10. java中字符串的算法_Java中的字符串搜索算法
  11. 拉普拉斯二阶锐化matlab,laplace(拉普拉斯)锐化matlab程序
  12. java中的i++和++i
  13. AD(Altium Designer)软件中原理图自制模板(图框)的妙用
  14. Burp Suite —— 验证码识别、切换IP
  15. 智能家居语音控制系统的设计与实现
  16. 记一下chrome浏览器被毒霸域名劫持解决方案
  17. 2019年 年终总结
  18. 笔记本什么都没开,风扇为什么一直转?——CDPUserSvc服务
  19. 另类搞笑:自我指涉例句不完全收集
  20. 重构碎片化知识_黄建锋:碎片化学习策略研究

热门文章

  1. Unable to save settings: Failed to save settings. Please restart IntelliJ IDEA
  2. 云计算学习(3-3)云计算的由来-应运而生
  3. c语言实现字符指针(字符串)数组的排序
  4. 2.select_基础运用
  5. 【转】心目中的编程高手
  6. qq飞车服务器维护中是什么,《QQ飞车》服务器对赛车平跑稳定性的影响攻略
  7. linux多节点部署,Linux下docker部署+面板portainer管理多节点docker
  8. java多线程实现表复制_Java多线程的三种实现方式
  9. 人工智能的两条进化路线
  10. 并行多机调度遗传算法调参记录---变异和淘汰哪个更重要?