C语言 外部定义和内联定义



gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0


我正在尝试内联和外部定义,这里有2个源文件链接在一起:

foo.c:

#include <stdio.h>
void foo(void){
printf("Test external definitionn");
}

main.c:

#include <stdio.h>
inline void foo(void){
printf("Testn");
}
int main(void){
foo();
}

编译两个文件链接在一起Test在控制台打印。

N2346::6.7.4/p6规定:

未指定调用函数是否使用内联定义或外部定义

如果一个函数的所有文件作用域声明都在一次翻译中单元包括不带extern的内联函数说明符,然后是翻译单元中的定义是内联定义。内联Definition不提供函数的外部定义,并且不禁止在另一种翻译中使用外部定义单位。

在这个例子中有内联定义外部定义。没有指定调用哪个

我运行了测试,在我的例子中调用了内联定义。是否有办法强制gcc调用外部定义?也许有什么旗帜?

引自6.7.4/10:

使用extern的文件作用域声明创建一个外部定义。

要使外部定义可供选择(无论编译器如何选择),必须有一个extern函数声明。

来自示例:

inline double fahr(double t) { ... }
...
extern double fahr(double); // creates an external definition

相关内容

  • 没有找到相关文章

最新更新