1、引用类型。
需要将结构体定义与头文件中(.h文件),然后在需要引用类型的源文件(.c)中,均引用该头文件,即可使用该类型。
2、引用全局变量。
要引用全局变量,需要先引用类型,之后在一个源文件中定义全局变量,在其它源文件中声明该全局变量,即可使用。
比如结构或模体为struct test, 定义全衫拆缓局变量为
struct test glabol_test
在其它文件中,只需要
extern struct test globol_test
即可在对应文件声明所御猛在行之下进行调用。
#ifndef identifier_h#define identifier_h
....
#endif
这套条件编译是为了防止同一个.c文件中包含多个相同启者.h文件的(比如有一个.c文件包含了a.h,a.h又包含了b.h,那么当你在这个.c文件中同时包含了a.h和b.h时,因为有上面的条件编译的关系而不会出错)。因为编译器在编译的时候是斗旁培按照.c文件为单位编译的,每个.c文件编译成.o文件(linux系统)或者.obj(windows系统),然后再将这些.o文件链接起来,最后与运行库链接形成可执行文空唯件(elf或exe文件)。
你在两个.c文件中包含了同一个.h文件。这根本和条件编译没什么关系。你在.h文件中定义了全局变量a, b, c。那么就表示你两个.c文件中,每个.c文件中都有这样的全局变量定义:int a, b, c当每个.c文件单独编译当然没有问题,但是当它们链接起来的时候就出现问题了:两个.c文件中都有变量a b c,所以当然是重复定义啊。问题是出在链接的时候的。
在头文件里锋段定义或基扒结构,例如:typedef struct {
int a, b
} S
S s_instance
在其他文件里引用就衫昌可以。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)