A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© tt3tt3tt 中级黑马   /  2015-8-2 14:09  /  4636 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

5黑马币
全局变量在函数外部定义,其作用域是从变量的定义处开始,到本程序文件的未尾。如果一个程序由多个文件组成,而一个外部变量需要在几个文件中引用,此时,可以在任一文件中定义该外部变量,在其它文件中用extern加以声明,全局变量若在每个文件中都定义该外部变量,则系统将提示“重定义类型错”。明明作用域只在本文件中,为啥还会出现重定义?

最佳答案

查看完整内容

1、全局变量是不显示用static修饰的全局变量,但全局变量默认是静态的,作用域是整个工程,在一个文件内定义的全局变量,在另一个文件中,通过extern 全局变量名的声明,就可以使用全局变量。 2、全局静态变量是显示用static修饰的全局变量,作用域是所在的文件,其他的文件即使用extern声明也不能使用。 ...

11 个回复

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

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

但是别的文件调用它,还要加extern啊,区别何在?
回复 使用道具 举报
DUKEMAN 来自手机 中级黑马 2015-8-4 13:09:34
8#
全局作用域在程序的任何位置都可以应用。多文件系统的文件作用域如static,只能在声明该变量的单个源文件中使用。对于多个源文件组成的程序来说,从另一个源文件中引用它没有声明的变量就需要加extern来说明。
回复 使用道具 举报
表示你说的问题不太理解。。‘
回复 使用道具 举报
引用其他文件的时候,申明的时候就等于把全局变量引用过来了
回复 使用道具 举报
虽然不是完全懂了,但是还是得谢谢
回复 使用道具 举报
学习了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马