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文件中。 |
Community wiki · C中有哪些耗时的操作? 1 年前 |
Community wiki · 将所有处理器电源都投入到任务中 1 年前 |
Community wiki · C++为C添加了什么?[已关闭] 1 年前 |
Community wiki · 打印1到1000,不带循环或条件 1 年前 |