Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
#包括「;另一个"来源c",;,在那里使用内联函数(),那么函数()也变成内联函数了吗?_C_Inline_Extern - Fatal编程技术网

#包括「;另一个"来源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标志

假设我有两个文件名为“AA.c”,“BB.c”

然后

/* 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;
}