#包括「;另一个"来源c",;,在那里使用内联函数(),那么函数()也变成内联函数了吗?
假设我有两个文件名为“AA.c”,“BB.c” 然后#包括「;另一个"来源c",;,在那里使用内联函数(),那么函数()也变成内联函数了吗?,c,inline,extern,C,Inline,Extern,假设我有两个文件名为“AA.c”,“BB.c” 然后 /* in BB.c */ #include "AA.c" extern void funcAA(void); int main(void) { funcAA(); return 0; } funcAA()是否也成为内联的 无论答案是“是”还是“否”,您是否可以解释一些关于“引擎盖下”的更多信息???包含.c文件相当于将文件内容直接复制和粘贴到包含该文件的文件中,这与直接在包含文件中定义函数完全相同 通过尝试使用-E标志
/* in BB.c */
#include "AA.c"
extern void funcAA(void);
int main(void)
{
funcAA();
return 0;
}
funcAA()是否也成为内联的
无论答案是“是”还是“否”,您是否可以解释一些关于“引擎盖下”的更多信息???包含.c文件相当于将文件内容直接复制和粘贴到包含该文件的文件中,这与直接在包含文件中定义函数完全相同 通过尝试使用
-E
标志(预处理器输出)编译文件,可以看到编译器将编译什么。您将看到粘贴的函数
因此,它将是内联的,仅仅是因为inline
关键字,并强制使用always\u inline
属性,即使编译器会因为函数大小等原因拒绝内联它
建议:当包含另一个.c
文件时,要知道自己在做什么。一些构建系统/生成文件只是扫描目录,查找名为*.c
的文件,以便可以单独编译它们。在那里放置一个可能未编译的C文件可能会导致生成失败,如果它生成,链接时可能会有重复的符号。别这样
如果要执行此操作,请将函数放入
.h
文件中,并将其声明为静态
,这样,如果包含在许多.c文件中,链接不会失败(每个函数将被视为不同)非常感谢您的回答:)
/* in BB.c */
#include "AA.c"
extern void funcAA(void);
int main(void)
{
funcAA();
return 0;
}