关于全局变量,如何被多个.c文件共享问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hello_world12138/article/details/52468761

这里有三个问题,都是比较类似的。


1.      如果我要在别的文件引用本文件的全局变量你有哪几种方法?extern、使用函数传参、使用引用头文件的方式。

2.      全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么? 答:可以,在不同的C文件中以static形式来声明同名全局变量。 可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错。 参见 :https://social.msdn.microsoft.com/Forums/zh-CN/5ed926a7-5572-440e-bd20-e387690f5c43/cstatic?forum=visualcpluszhchs

// delay.h 注意这里绝对不能赋初值,这是头文件中使用的方法。

#ifndef __delay_H__

#define __delay_H__

static int numStatic;//定义了一个静态的变量

extern int numExtern;//引用外部变量

#endif

注意!!!:1)对于extern,使用的时候,需要在某一个.c文件中定义一下使用到的全局变量,才能正常的使用,这是因为没有实体,但是不能在两个及以上的文件中定义。

            2)对于static,使用的时候,需要在某个函数中,最好是main函数的一开始进行变量的初始化,不然没有意义了。但是这里有一个问题!那就是,在使用的时候,每个.c文件包含了这个静态变量以后,和别的.c文件并不共享,仿佛得到了这个静态变量的一份拷贝,相互无关。这个原因应该是,static关键字的作用,那就是被修饰的变量本.c可见,其他.c文件不可见。

3.      如何引用一个已经定义过的全局变量?答:extern 可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。



红字为个人理解,仅供参考。

猜你喜欢

转载自blog.csdn.net/hello_world12138/article/details/52468761