注意声明和定义其实是两回事,严格的说来
extern int a; // 这只是声明有一个变量a
extern int a=0; // 这是声明、定义一个变量a
一般在头文件中使用
extern int a; // 这仅仅是声明了有全局变量a
然后再某个具体的C文件中再有对应的
int a; // 这里是定义了全局变量a,之后就可以使用啦。
这样,在多个C语言都引用同一个头文件时,不会出现重复定义的问题,因为
extern int a; // 仅仅是声明,定义则在某个具体的c文件中。
----------------
所以,如果全局变量,只会有一个c文件引用秒,则里面的全局变量可不加extern(但对应的c文件中就不能再有该变量的定义,因为已经定义过啦),否则建议都加上。
需要注意对于函数来说没有这个需求。
由此比较规范的处理就是在H中声明全局变量都加上extern,然后再在c文件中定义(只能有一个c文件中出现定义)。