gpt4 book ai didi

c - 如何在 C99 中正确内联和使用内联函数,更正链接失败?

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

在以下简化的 example.c 文件上执行 cc -std=c99 example.c:

inline void a()
{
}

int main()
{
a();

return 0;
}

让我:

In function `main':
example.c:(.text+0x7): undefined reference to 'a'
collect2: ld returned 1 exit status

据我了解,这与 C99 标准的要求有关,要求为在主体无法内联的情况下使用的每个内联非静态函数再定义一个?如果是这样,我猜我可以用 static inline 来代替,但我不希望这以后会影响到我,那么这里最好的做法是什么?显然,我想坚持使用 C99,我想内联一些功能。 (是的,我知道编译器通常在没有被告知的情况下知道要内联什么,但我有我的理由)

最佳答案

使用 -O2 左右编译时可能不会出现该错误。

内联函数定义应该放在头文件中,extern inline 声明应该放在一个编译单元中。做

inline void a(void){
// empty
}

// in just one .c file
#include "the-file.h"
extern inline void a(void);

顺便说一句,在没有 void 的情况下声明 a 不是原型(prototype)。

关于c - 如何在 C99 中正确内联和使用内联函数,更正链接失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5369888/

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