黑马程序员技术交流社区

标题: C语言全局变量的疑惑! [打印本页]

作者: tt3tt3tt    时间: 2015-8-2 14:09
标题: C语言全局变量的疑惑!
全局变量在函数外部定义,其作用域是从变量的定义处开始,到本程序文件的未尾。如果一个程序由多个文件组成,而一个外部变量需要在几个文件中引用,此时,可以在任一文件中定义该外部变量,在其它文件中用extern加以声明,全局变量若在每个文件中都定义该外部变量,则系统将提示“重定义类型错”。明明作用域只在本文件中,为啥还会出现重定义?

作者: Maruka    时间: 2015-8-2 14:09
1、全局变量是不显示用static修饰的全局变量,但全局变量默认是静态的,作用域是整个工程,在一个文件内定义的全局变量,在另一个文件中,通过extern 全局变量名的声明,就可以使用全局变量。
2、全局静态变量是显示用static修饰的全局变量,作用域是所在的文件,其他的文件即使用extern声明也不能使用。
作者: Eil.tea    时间: 2015-8-2 17:26
因为在引入头文件的时候,相当于把这个声明也引入过来了,所以可以认为,你原来定义的内容是你这个文件的一部分
作者: bianning888    时间: 2015-8-2 17:50
你定义的全局变量的作用域是整个源程序,在各个源文件里都有效,你用static修饰成静态全局变量就只作用于你定义的文件里了
作者: bianning888    时间: 2015-8-3 22:04
你有多个源文件的时候,静态全局变量是定义这个变量的源文件独享的,对其他文件无效,没有static修饰就可以被其他的源文件调用,这样说理解了吗
作者: tt3tt3tt    时间: 2015-8-4 09:51
bianning888 发表于 2015-8-2 17:50
你定义的全局变量的作用域是整个源程序,在各个源文件里都有效,你用static修饰成静态全局变量就只作用于你 ...

但是别的文件中需要使用它,还需要加extern!既然都有效为什么还要加extern
作者: tt3tt3tt    时间: 2015-8-4 09:52
bianning888 发表于 2015-8-3 22:04
你有多个源文件的时候,静态全局变量是定义这个变量的源文件独享的,对其他文件无效,没有static修饰就可以 ...

但是别的文件调用它,还要加extern啊,区别何在?
作者: DUKEMAN    时间: 2015-8-4 13:09
全局作用域在程序的任何位置都可以应用。多文件系统的文件作用域如static,只能在声明该变量的单个源文件中使用。对于多个源文件组成的程序来说,从另一个源文件中引用它没有声明的变量就需要加extern来说明。
作者: yefeidd    时间: 2015-8-4 16:36
表示你说的问题不太理解。。‘
作者: ReoWei    时间: 2015-8-4 22:10
引用其他文件的时候,申明的时候就等于把全局变量引用过来了
作者: tt3tt3tt    时间: 2015-8-6 23:24
虽然不是完全懂了,但是还是得谢谢
作者: hyisya    时间: 2016-6-23 14:28
学习了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2