C语言中extern关键字的作用
extern 关键字 声明一个“外部变量” 。有了这个声明,就可以从声明开始的地方,合法地使用该外部变量了。
在例1中,我们在最后才定义了外部变量 g_X , g_Y ,由于外部变量定义的位置在main函数之后,因此本来我们在main函数中是不能够引用 g_X , g_Y 的,因为在使用的时候并没有定义它们的数值。现在我们在main函数中用 extern 对它们进行“外部变量声明”,就可以从声明的位置起使用它们了。
对于多个文件的工程,都可以采用例2的方法。
对于模块化的程序文件,可以先预留好外部变量的接口,也就是只采用 extern 声明变量,而不定义变量值,像例2中的 max.c 中那样。变量值的定义留给使用者。
通常,这些外部变量的接口都是在模块程序的 头文件 中声明的。当需要使用该模块时,只需在使用时具体定义一下外部变量即可。比如main.c中的 g_X , g_Y 。
不过需要注意,由于用 extern 引用外部变量,可以在引用的模块内修改变量的值,因此如果有多个文件同时对引用的变量进行操作,并且可能会修改该变量,那么就会影响其他模块的使用。因此需要慎重使用。
总结
一般来说,头文件只能声明函数和变量,其定义只能在某个.c文件中