2.o 中的函数 f 具有全局作用域,而 1.c 如果他愿意,他可以使用它。 但在 1.o 中 f 有唯一的定义。 链接器同意接受它 这里怎么没有冲突?他选择哪个定义?为什么? 文件 2.c 中的函数 f 不是也必须是静态的吗?
1.c
static void f() {
}
gcc -c 1.c
2.c
void f() {
}
gcc -c 1.c
gcc 1.o 2.o -myprog
这里没有问题。 2.c中的函数
f
是全局可见的。 1.c 中的函数 f
仅在该翻译单元内可见,即仅对 1.c 内的代码可见。 2.c 中的函数 f
不为 1.c 的任何部分所知,因为您没有将其声明为外部函数,因此 1.c 中引用(或调用)f
的任何代码都将使用f
定义于 1.c.