源地址:https://blog.csdn.net/vigour1000/article/details/9622037

有一段儿时间没写写经验笔记了,哎,也是自己这一段时间以来(其实最近一直是这个状态)一直被找工作的氛围所影响吧,鲜有时间能静下心来翻翻文章、看看手册、搞搞开发,这点上我在看了yulzhu的《假期闲话》一文中深有感触(有兴趣可以移步看看,http://blog.chinaaet.com/detail/30099.html),好文章的灵感离不开平时丰厚的积累和大量的阅读,而当我们的积累被消耗的差不多的时候就会遇到瓶颈(咳咳,通俗了讲就是卡壳了,呵呵),这个时候需要大量的实践和阅读来补充。所以前一段时间不平静期一定程度上影响了自己系列博客的产出数量和质量(从零入手系列就因此让我暂时停滞了下来,不过等元旦之后一切稳定下来的时候我会继续更新的,一直积攒了一些,到时候会连续爆出猛料的,敬请期待,呵呵),今儿就暂时静下心来跟大家分享一点工程经验吧~

前些日子在网上看些资料的时候,无意中邂逅了Inline函数(即内联函数),然后又近一步的搜了搜相关资料进行了深入的了解,然而不了解不知道一了解吓一跳,呵呵,之后就把它当作了宝贝似的收藏了起来(咳咳,自己又没出息了,大牛们如果看到了不要拍砖)。好东西不敢独享,所以今儿就把自己关于Inline函数的经验笔记分享一下,毕竟大家好才是真的好嘛,哈哈,下面进入正题:

首先介绍下相关背景,Inline函数,即内联函数,它是把函数内部的代码直接插入到调用者代码处的函数,也就是该函数不是通过子函数调用这种常见的方式来实现的,而是直接替换到函数调用处(这点上有点类似#define宏),由此带来的优势就是省去了调用/返回指令,通过避免调用带来的开销(包括函数调用带来的额外的执行周期和堆栈的使用)来提高代码的执行效率,而又同时保留了函数封装形式带来的可读性,很好用吧有木有,下面就让我们看看具体的使用形式:

/****************函数声明部分*****************/
void delay(void);//delay函数声明,此处不用加Inline关键词
void main(void)
{
/***************Insert your code in the following***************/
EnableInterrupts;
while(1)
{   
testPoint = 0;
delay();//定义了inline的delay函数,在编译连接的时候就会直接嵌入到该行代码处,而不是通过调用实现
}
}
/**注意关键字inline 必须与函数定义体放在一起才能使函数成为内联,将inline 放在函数声明前面不起任何作用**/
inline void delay(void)
{
uint8 i=0;
while((i++)!=200);
}
上面就是我们使用inline内联函数的方法,很简单却很管用,不过inline内联函数内部不能用复杂的运算,这算是一个限制了吧,不然岂不是都争抢着用了,呵呵。另外可能还有人会问,既然Inline函数与#define宏的功能类似,那为什么不用#define宏呢,我的回答只能说是用inline更快且不容易出错,至于具体原因有兴趣的博友可以google一下,俺就不多说了。。。

转载于:https://www.cnblogs.com/maxpak/p/11106068.html

【转】 嵌入式C语言编程中Inline函数的应用相关推荐

  1. 嵌入式C语言编程中经验教训总结(二)LDS链接文件解析

    目录 为什么要用到lds链接脚本? lds文件语法结构 lds文件实例解析 好的朋友已经做过好多年的arm开发,却对底层的编译链接逻辑很少接触,主要原因在于现在大多数应用层的开发不需要从裸板开始,工程 ...

  2. 对main函数的理解c语言,C语言编程漫谈——main函数

    写在前面 促使我写这篇文章是因为我这几天找了几个一样是大三的同学,与我相同专业相同方向(物联网)的人,除了@小胡同的诗,基本没有什么其他人会现在看起来很简单的编程题目了.问了一下其他同学,他们大部分都 ...

  3. c语言中错误executing,C语言编程中常见问题解读.doc

    C语言编程中常见问题解读 为什么vc6打开的文件却不能编译1 为什么一个vc6工程中有两个main函数不能编译成功?我想写两个程序怎么办?2 为什么v6不能编译程序,生成信息说compile和link ...

  4. R语言编程学习之函数与模型:VAR与SVAR和爬虫(图)

    R语言编程学习之函数与模型:VAR与SVAR和爬虫(图) SVAR模型与VAR模型在模型设定形式上的区别是,VAR模型只包含变量的滞后项,而SVAR模型还包含了变量的当期项.SVAR模型还可以避免联立 ...

  5. c语言编译面板上总有个0,C语言编程中常见问题.doc

    C语言编程中常见问题 为什么vc6打开的文件却不能编译1 为什么一个vc6工程中有两个main函数不能编译成功?我想写两个程序怎么办?2 为什么v6不能编译程序,生成信息说compile和link都正 ...

  6. c语言中回显,C语言编程中实现输入密码回显星号

    C语言编程中实现输入密码回显星号 众所周知,一个良好的密码输入程序是在用户输入密码时不显示密码本身,只回显星号. 或者,在安全性要求更高的某些程序中,什么都不显示.那么,在C语言中如何实现它呢? ge ...

  7. c语言运行太短怎么毡筒,C语言编程中的常见问题-最新文档.doc

    C语言编程中的常见问题-最新文档.doc 激也浸簧哼贰罪匠智事帛棕错永荤腑亦蛋讳躇睁传耀如雾油瘤十倍骋代敌楼毒伟愿煎蜡斌牺脯莆义贴炳揣烧瑶馅熟旨渍暂躲孟幢漏件哭射酱昏差辱尤可耕宾谍拼渠乱御日癸拳柱络胺 ...

  8. c++与fortran混合语言编程中动态链接库的调用,[转载]C++与Fortran混合语言编程中动态连接库的调用...

    摘 要:介绍了C++和Fortran 90混合语言编程中,在C++中调用Fortran动态连接库(DLL,Dynamic Link Library)的方法以及参量传递.函数调用等的方法. 关键词:混合 ...

  9. 《C语言解惑》—— 第一篇 C语言编程中的对与错

    本节书摘来自华章出版社<C语言解惑>一 书中的第1章,第1.1节,作者:刘振安 刘燕君,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 第一篇 C语言编程中的对 ...

最新文章

  1. Linux下Sed命令的用法(之替换)
  2. 界面之下:还原真实的MV*模式
  3. 云炬VB开发笔记 1初始Visual Basic基础
  4. 没文化连广告都看不懂—“网易密码信破解”【续】
  5. url中隐藏php后缀,url中如何隐藏.php
  6. 深度学习(四十五)条件对抗网络
  7. 牛客小白月赛9 A签到(乘法逆元)
  8. linux常见问题(lrzszvim乱码crontab用户授权chkconfig)
  9. Java转C#的最佳工具
  10. python如何画出多个独立的图片_python使用matplotlib:subplot绘制多个子图的示例
  11. 狂野!利用Fastjson注入Spring内存马~
  12. Nesterov Momentum牛顿动量法
  13. synchronized的底层实现
  14. 让人醍醐灌顶的线性代数视频,深刻理解线性代数
  15. SMILES:化学结构的线性表示方法
  16. (最新)唯品会WEB端加密参数逆向分析
  17. 愿你三冬暖,愿你春不寒
  18. Codeforces Round #737 (Div. 2)---C. Moamen and XOR
  19. UniCode编码对照表及过滤方案
  20. [HUST]多媒体安全实验:图像隐写JSTEG,F4,F5的实现

热门文章

  1. tomcat 执行一个web请求的过程
  2. (一四三)类设计回顾
  3. Start wpf application from windows service
  4. Effective Java 学习笔记 1
  5. 分析:合格的UTM设备评判与选择
  6. flink sql planner到底是干嘛用的
  7. softmax函数上溢出和下溢出(转载+自己理解)
  8. 根据权威文献区分梯度上升与梯度下降
  9. 把汇集多个json文件的txt进行分割,然后批量修改文件名后缀
  10. 在Ubuntu Linux 16.04下(64位)打开.ipynb文件