GCC For ARM 的内联函数问题,有些疑惑需探讨

2019-12-13 18:19发布

我的 STM32 项目用 GCC 编译,遇到一个内联函数的问题:

当时是一个处理函数体积偏大,就拆成了几个内联小函数(inline)来增加可读性。

编译条件为 -g -O2 ,结果发现执行不正常,在某个地方死循环。

跟踪到内联函数处,发现是内联函数内的 return 又跳回它本体的入口处,这就造成了一个死循环。

所以不知道其他兄弟有没有碰到过类似的问题?如何解决?

我目前的处理方式是:

取消内联,直接当作普通函数使用。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
waterghost
1楼-- · 2019-12-13 20:19
内联是c++ 。。 c没有内联。
chunjiu
2楼-- · 2019-12-14 01:37
waterghost 发表于 2019-3-5 08:48
内联是c++ 。。 c没有内联。

C 文件在编译时也没有遇到警告,

我尝试一下改成 C++ 编译。
dukelec
3楼-- · 2019-12-14 02:09
1. C / GCC 支持 inline.

2. 你的问题表面上是 inline 导致,其实有更深层次其它问题,你的改法意外隐藏了该问题。

3. 可以先不改代码,关掉优化调试看看,优化后的 ASM 代码比较乱,对你容易造成误导。

4. inline 一般都建议和 static 配合使用,static 加在前,除非你很清楚你在做什么。
chunjiu
4楼-- · 2019-12-14 06:52
 精彩回答 2  元偷偷看……

一周热门 更多>