gpt4 book ai didi

c - 如何在 C99 中正确内联和使用内联函数,纠正链接故障?

转载 作者:行者123 更新时间:2023-11-30 16:38:01 26 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 等编译时,可能不会出现该错误。

内联函数定义应位于头文件中,外部内联声明应位于一个编译单元中。做

inline void a(void){
// empty
}

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

顺便说一句,声明没有 voida 不是原型(prototype)。

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

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