这些是C语言的基础问题
在同一个被编译的项目中,不能出现名称完全一样的结构体或者全局变量,也不能出现完全一样的函数(即类型、名称、参数类型完全相同)。
而对于具体的申明/定义的位置则没有特别的要求,只要在使用时已经被申明即可。可以在代码文件(.c)的头部申明要用到的全局变量,在申明某个结构体变量前定义这个结构体。而对于在头文件(.h) 中申明的内容,可以视作该头文件的所有代码出现在代码文件引用头文件处(即include "xxx.h")处。通过这种形式也可以多个代码文件共同包含一个头文件来共用某些结构体,以避免重定义。
extern形式的申明则用于申明那些在其它地方被定义的全局变量或者函数。