#include "another_source.c",在那里使用 inline function( ),那么 function( ) 是否也变成 inline 了?

#include "another_source.c", use inline function( ) there, then does the function( ) become inline as well?

假设我有两个名为 "AA.c"、"BB.c"

的文件
/* in AA.c */

inline void AA(void) __attribute__((always_inline));
void AA()
{
    /* do something */
}

然后

/* in BB.c */
#include "AA.c"

extern void funcAA(void);
int main(void)
{
    funcAA();

    return 0;
}

funcAA( ) 是否也变为内联???

无论答案是是还是否,您能否解释一下幕后的更多信息??

包含 .c 文件等同于将文件内容直接复制并粘贴到包含该文件的文件中,就像函数直接定义在包含文件中一样。

您可以通过尝试使用 -E 标志(预处理器输出)编译您的文件来查看编译器将要编译的内容。您会看到您的函数已粘贴。

所以它将内联只是因为 inline 关键字,并且强制使用 always_inline 属性,即使编译器会因为函数大小而拒绝内联它。

忠告:当包含来自另一个文件的 .c 文件时,知道自己在做什么。一些构建 systems/makefiles 只是扫描目录寻找名为 *.c 的文件,这样他们就可以单独编译它们。将可能未编译的 C 文件放在那里可能会导致构建失败,如果构建成功,则在 linking 时可能会出现重复的符号。只是不要这样做。

如果你想这样做,把你的函数放在一个 .h 文件中并声明它 static 这样如果包含在许多 .c 文件中它就不会失败 link (每个功能都会被视为不同)