C语言中两个源文件,有两个同名的未初始化全局变量,这时哪个算该变量的定义?

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
回复
科学之子
帖子: 2284
注册时间: 2013-05-26 6:58
系统: Debian 9

C语言中两个源文件,有两个同名的未初始化全局变量,这时哪个算该变量的定义?

#1

帖子 科学之子 » 2014-11-30 18:37

C语言中两个源文件,有两个同名的未初始化全局变量,这时哪个算该变量的定义?
比如:
a.c:
int i;
b.c:
int i;

main.c:
int i;
int main(void){return 0;}

//这时哪个文件中的声明算定义?
rosynirvana
帖子: 893
注册时间: 2011-02-14 17:46

Re: C语言中两个源文件,有两个同名的未初始化全局变量,这时哪个算该变量的定义?

#2

帖子 rosynirvana » 2014-11-30 19:11

cs:app 7.6.1
Functions and initialized global variables get strong symbols. Uninitialized global variables get weak symbols.
Rule 1: Multiple strong symbols are not allowed.
Rule 2: Given a strong symbol and multiple weak symbols, choose the strong symbol.
Rule 3: Given multiple weak symbols, choose any of the weak symbols.
简单回答是:都有可能
回复