1.C语言可以在不同的源文件中定义相同名字的全局变量吗?
不使用static的时候,两个不同的源文件都可以正常编译,但会出现链接错误,原因是有两个地方存在相同的变量,导致编译器无法识别应该使用哪一个。
关于全局变量的几点说明:
①默认情况下,C语言中的全局变量和函数的作用域仅限于定义和声明这个函数或变量的文件内部,如果需要从这个C文件之外访问这些函数或者全局变量就需要使用 extern关键字进行声明,这是因为C编译器是以C文件为单位进行编译的,如果这个C文件中引用了其他文件中定义的函数或者变量,编译器将无法找到这个函数或者变量的定义,从而给出该函数或者变量未定义的错误信息。
②static用于全局变量的声明时,作用类似于函数的情况,这个全局变量的作用域将局限在声明该变量的c文件内部,这个c文件之外的代码将无法访问这个变量。编译的时候将会出现类似undeference to "xxx"的报错,它是找不到xxx的,因为使用static相当于进行了文件隔离。
2、那么再引申另一个问题,能不能在头文件中定义全局变量?
因为变量只能被定义一次,包含了头文件的源文件,都将会定义同样的全局变量,造成冲突,所以,头文件中不能定义全局变量。
3.解决方法:
假设工程中的多个源文件需要这个全局变量,那么你就任找一个a.h头文件,用extern去声明这个变量,然后源文件a.cpp中去定义它(注意这个是真正定义的地方,不再需要带extern),最后在需要使用这个全局变量的源文件中include"a.h"就OK了。(其他的cpp中为了程序的可读性, 最好还是加上extern声明) 例子:C++extern全局变量_MrZhangXX的博客-CSDN博客_c++ extern 全局变量
————————————————
版权声明:本文为CSDN博主「十一月zz」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/baidu_35679960/article/details/79200865