切记切记,定义的变量要放在C文件里,声明才放在H文件。
标准的做法还是在.h文件中声明变量,在一个.c文件中定义变量,其它.c文件要用到变量只要包含.h头文件,相当于变量声明,就可以引用其它.c文件中定义的变量了。
即使可以通过#ifdef的方式解决问题,这也不是好的方法,对于变量的定义,应放在实现文件里面,然后通过extern的方式来引用
上面提到的方法也不通用,比如说有几个.c文件要包含同一个.h文件,而那个.h文件定义了变量或者结构编译还是会通不过,比较通用的方法是:专门用一个.c文件来定义变量或者结构,用对应的.h文件来声明。所有的.c文件都则都可以包含声明变量的.h文件。
在WARN.h文件的最开始两行加上
#ifdef_WARN_H_
#define_WARN_H_
在该文件的最后一行加上
#endif
你的头文件没有用LS那个所说的条件编译指令
当你在多个地方包含这个头文件的时候,就会在两个地方产生定义
因为,其实包含也是比较单纯的文本复制,相当于一个头文件被分别复制到两个地方,这个编译的时候当然就冲突了
一般只在头文件中声明变量,在原文件中定义变量,即使你在头文件中使用了预编译指令#ifndef....#define...#endif,也不能在头文件中定义变量。