作为一个C语言萌新。在平时练习中遇到这样一种情况:希望我在头文件中定义的全局变量可以被多个.c文件公用。
开始我直接子头文件中写一个定义如inta; 但是问题很快就来了,编译的时候,编译器报错,多次定义a。在这里应该考虑的是,头文件在编译过程中,是直接加在.c文件前面的,也就是说,我们定义之后,每一个文件中,都会出现一个int a;的定义。
也就是上述原因,我展现了我萌新本质,在int a;前添加了static。嘿,编译器果然没报错,编译顺利通过。结果呢,几个.c文件之间并没有共享int a;这个全局变量。查资料后发现,static 能将变量向其他文件隐藏。几个.c文件中的定义之间没有半毛钱关系,根本不知道互相的存在。
那么怎么办呢?
正确的解决办法,使用extern关键字来声明变量为外部变量。在我的主函数中定义一个int a;其他需要使用a的.c文件通过extern int a;来声明一次。就可以共享这个变量a了。如下图:
现在距离我们最终需要的结果只差一步了:将int a;的定义放到.h文件中,同事问题也回到了第一步。经过查资料,可以通过条件编译的方法来解决这个问题。
在.h文件中,添加条件编译,在main中定义MAIN,在编译过程中,inta;就不会添加到test.c中了。编译运行,通过。
此文仅为萌新自我记录与分享,如有其它方法,或这种方法有什么缺点,请大牛不吝赐教,谢谢!