gpt4 book ai didi

c - 外部内联函数会发生什么?

转载 作者:太空狗 更新时间:2023-10-29 16:37:25 25 4
gpt4 key购买 nike

如果我将 .h 文件中的函数定义为

extern int returnaint(void);

在相关的.c文件中定义为

inline int returnaint(void) {
return 1;
}

并在另一个 .c 文件中包含标题并使用函数?当我单独编译这些东西时,为每个 .c 文件创建一个目标文件,然后链接它们,是否包含内联函数,或者会发生什么?

我知道编译器可以忽略 inline,但如果在这种情况下它不忽略它呢?

最佳答案

inline 添加到 .c 文件中的函数定义只是多余的。

  • .c 文件的编译单元看到一个 extern 声明(没有 inline)和一个 inline 定义。因此它发出目标文件中函数的符号。

  • 所有其他编译单元只能看到 extern 声明,因此如果您将最终可执行文件与其他 .o 链接,它们可以毫无问题地使用该函数> 文件。

事实上,你只是用错了方法。此功能旨在用于您在 .h 文件中具有 inline 定义,并且对所有人可见。函数的这个定义仅作为符号的声明,就像 extern 一样,但不定义它。

只有一个 .c 文件(编译单元)中的一个 extern 声明然后确保符号在那里被定义。

术语有点困惑,inline definition 作为符号的声明,extern declaration作为它的定义

关于c - 外部内联函数会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17504316/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com