多重定义和静态关键字

问题描述 投票:0回答:1

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
c static-methods
1个回答
0
投票

这里没有问题。 2.c中的函数

f
是全局可见的。 1.c 中的函数
f
仅在该翻译单元内可见,即仅对 1.c 内的代码可见。 2.c 中的函数
f
不为 1.c 的任何部分所知,因为您没有将其声明为外部函数,因此 1.c 中引用(或调用)
f
的任何代码都将使用
f
定义于 1.c.

© www.soinside.com 2019 - 2024. All rights reserved.