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