gpt4 book ai didi

.c 文件中的 C99 内联函数

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

我在 .c 中定义了我的函数(没有 header 声明),如下所示:

inline int func(int i) {
return i+1;
}

然后在下面的同一个文件中使用它:

...
i = func(i);

在链接过程中,我得到了“对‘func’的 undefined reference ”。为什么?

最佳答案

C99 中的inline 模型与大多数人想象的有点不同,尤其是与 C++ 使用的模型不同

inline 只是一个提示,编译器不会提示双重定义的符号。如果需要,它不保证函数是内联的,也不保证实际生成符号。要强制生成符号,您必须在 inline 定义之后添加一种实例化:

int func(int i);

通常您会在头文件中包含 inline 定义,然后将其包含在多个 .c 文件(编译单元)中。而且你只会在一个编译单元中有上面的行。您可能只会看到您遇到的问题,因为您没有对编译器运行进行优化。

因此,您在 .c 文件中使用 inline 的用例没有多大意义,最好只使用 static ,甚至是额外的 内联不会给你带来太多好处。

关于.c 文件中的 C99 内联函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16245521/

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