1、什么叫inline函数
inline其实是是C++关键字(但是IAR支持),在函数声明或定义中,函数返回类型前加上关键字inline,即可以把函数指定为内联函数。这样可以解决一些频繁调用的函数大量消耗栈空间(栈内存)的问题。用空间换效率。在调用inline函数时,编译器将函数在调用处展开,而不是直接调用。这种方式有点儿类似于宏定义。
优点是可以减少函数调用时间,和入栈出栈操作,也减少了栈空间的使用。
缺点是增加了代码空间,因此通常不在inline函数中执行太多的代码。也不能在inline函数中进行递归(自己调用自己)。
2. IAR中的inline函数
inline函数传统上只有C++支持,但IAR EW也支持在C代码中使用inline.
#pragma inline:建议编译器对紧随其后的函数进行inline处理
#pragma inline = forced: 强制编译器对紧随其后的函数进行inline处理

// tft.c中定义内联函数
#pragma inline = forced          //强制inline
void TFT_Write_Colour(const RGB_COLOUR *rgb)
  //...code....
}
 
// tft.h中声明函数
void TFT_Write_Colour(const RGB_COLOUR *rgb);
 
// main.c中调用函数
// 编译报错:main中引用了未定义的外部函数TFT_Write_Colour。
 
 
// tft.h中“定义函数”
#pragma inline = forced          //在IAR EW430中,这里必须用强制inline;用inline可能导致编译器忽略内联,而定义成普通函数而出错。
void TFT_Write_Colour(const RGB_COLOUR *rgb)
  //...code....
}
 
// main.c中包含tft.h,并调用函数
// 结果:编译正确
 
不过在IAR IDE下使用inline 定义的函数很多时候不会如程序设计者所愿的内联到代码中,会仍旧以函数调用的形式存在。inline关键词本身就是推荐编译器进行内联,不过编译器不接受推荐,那么自然就没用了。IAR IDE在采用默认设置时是不接受inline建议的,想让其按照程序设计者的意愿内联函数的话,需要在优化选项中进行设置。
设置选项在:Options->C/C++ Compiler->Optimizations。
只有把优化等级开到High才能在右边的Enable复选框中选择Function inlining。选择这两个之后inline定义的函数就可以正常的在汇编代码中结合在一起,不过因为是开了优化,有些并没有inline定义的函数也会被内联。不过编译器的智能程度还是比较喜人的,目前没发现什么特别差的优化结果。

转载于:https://www.cnblogs.com/looner/p/11494491.html

inline函数在IAR中的使用相关推荐

  1. 关于头文件中的 static inline函数

    关于头文件中的 static inline函数 头文件中常见static inline函数,于是思考有可能遇到的问题,如头文件经常会被包含会不会产生很多副本?网上说法不一.于是自己验证.经过arm-n ...

  2. 关于inline函数

    (一)inline函数(摘自C++ Primer的第三版) 在函数声明或定义中函数返回类型前加上关键字inline即把min()指定为内联. inline int min(int first, int ...

  3. inline函数的作用

    (一)inline函数(摘自C++ Primer的第三版) 在函数声明或定义中函数返回类型前加上关键字inline即把min()指定为内联. inline int min(int first, int ...

  4. inline函数用法详解

    inline函数定义 内联函数的编程风格 慎用内联 inline 和 预处理的区别 参考资料 inline函数定义 在函数声明或定义中函数返回类型前加上关键字inline即把min()指定为内联. i ...

  5. C++ inline函数

    目录 inline函数定义 使用风格 为什么要使用内联函数 内联函数的一些使用建议 inline函数定义 在函数声明或定义返回值类型前添加关键字inline即将函数指定为内联函数 inline int ...

  6. C语言inline函数

    c语言中的的内联(inline)函数 c/c++中的inline,使用在函数声明处,表示程序员请求编译器在此函数的被调用处将此函数实现插入,而不是像普通函数那样生成调用代码(申请是否有效取决于编译器) ...

  7. html中inline函数,开窗函数和窗口函数区别 inline函数和一般的函数有什么不同

    sql over开窗函数 和group by的区别 / 蓝讯如果有多个聚合函数,但是分组依据不同,此时只能使用开窗函数. 而GROUP BY要求聚合函数的分组依据一致. SQL Server中的开窗函 ...

  8. 【转】 嵌入式C语言编程中Inline函数的应用

    源地址:https://blog.csdn.net/vigour1000/article/details/9622037 有一段儿时间没写写经验笔记了,哎,也是自己这一段时间以来(其实最近一直是这个状 ...

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

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

最新文章

  1. 吴恩达、李飞飞、沈向洋:2021年的人工智能将会如何发展?
  2. 微信公众平台开发 - 动手篇。使用weinxinFundation开始一个微信公众平台的开发
  3. python处理excel文件-python读取excel文件
  4. Linux fork()一个进程内核态的变化
  5. freetextbox文本编辑器
  6. 实现WebMvcConfigurer接口扩展Spring MVC的功能
  7. Mybatis配置文件头
  8. django_4:数据库1——django操作数据库
  9. 源码安装mysql5.1.51
  10. Linux简单命令集——less
  11. java servlet 调试日志 logger sae_java servlet 调试日志 lo
  12. C++11的POD类型
  13. 样本打散后计算单特征 NDCG
  14. 2019必学的10大顶级Python库!
  15. android ble 写失败,Android低功耗蓝牙BLE写入数据很大几率会失败 求解
  16. nginx中报403 Forbidden问题
  17. python基础之字符串(七)
  18. java 寻找峰值峰谷_Java实现 LeetCode 162 寻找峰值
  19. 顺丰笔试-赏金猎人2020-08-20(参考时间最大利益)
  20. 如何给电脑安装双系统

热门文章

  1. 【Hive】Hive练习题(二)
  2. 电子签章过程中的原始数据处理
  3. java 森林_森林 - Minecraft Wiki,最详细的官方我的世界百科
  4. Collection
  5. 每日一道SQL题(第N高的薪水)
  6. 数据库-查询第二高的薪水
  7. Mac 卸载/安装 maven
  8. 模糊PID控制的规则表一点理解
  9. 我的大学六年--郭天祥
  10. java web项目——MySQL中文乱码问题解决