1
4
内联只是一个建议,而不是命令。然而,一般来说,编译器足够聪明,可以做正确的事情(而且,就优化而言,Green Hills有很好的声誉)。 使函数“static inline”,这将阻止编译器使符号可导出。这样可以修复多个定义链接错误…链接器抱怨同一个函数是从几个源模块导出的。 |
2
0
一些重要注意事项: 似乎你没有正确地保护你的头部。
这样可以防止在头为
您似乎还认为可以强制编译器内联您的函数。这是不正确的。一个疯狂而模糊的编译器标记放在一边,编译器总是决定是否要在生成的代码中内联您的函数。inline关键字的含义/目的与您的想法不同,请参见 here |
3
0
你所说的“2000年以前的C语言规范”(上一个标准是在1999年最终确定的)是什么意思还不清楚。在此之前,
1999年标准规定:
这意味着只要你没有声明
|
4
0
如果在.h文件中有内联定义,并将其包含在许多.c文件中,则尝试使用armcc编译器编译lib。 现在 如果使用--gnu compiler选项编译armcc代码,那么链接时也会看到multiple define错误,因为编译器会将定义放入每个.c文件并导出它。 似乎在尝试使代码与gcc兼容时,我们遇到了这个缺点。 为了避免这种情况,可以使用--c99选项而不是--gnu。 并且消除了在.c文件中由于编译器导出内联函数而导致的这种乘法定义问题。 |
5
-1
在C语言中,无论函数是否内联,都不能在多个地方定义同名的函数。 处理此问题的最佳方法是在头中声明函数(以及它所依赖的结构定义,如:
然后在.c源文件中的一个位置定义函数:
然后将这个头文件包含在调用函数的所有.c文件中。 |
conopizda2 · 为什么我的静态数组没有被memset清除? 2 年前 |
jhe4x · C按位OR返回的值不正确 2 年前 |
Tim · 如何用c语言打印程序的执行流程# 6 年前 |
jatinBatra · 关于嵌入式固件开发[已关闭] 6 年前 |
Will · 嵌入链接器脚本-是否正确放置“堆栈”和“堆”区域? 6 年前 |
K. Crow · 不等于PIC32上启用中断时操作员不工作[关闭] 6 年前 |
spiff42 · 清除位时唯一的最大不同字节值集 6 年前 |