来自这个帖
[在头文件中中定义全局变量的问题]
http://bbs.youkuaiyun.com/topics/390762077
Q:使用#ifndef在头文件中定义全局变量,然后两个.c文件分别访问(#include),编译时就会出现multiple definition的提示,但是已经使用了条件编译,理论上第二次应该跳过定义过程,这是为什么呢?
A:这类条件编译是为了防止同一个.c文件包含同一个头文件多次。
楼主要明白:每一个.c文件最后都会编译生成对应的.obj文件的。所以你的两个.c文件对应的两个.obj文件都会有你说的那个全局变量的,链接的时候,链接器就会发现有定义了两个同名变量,于是就报multiple definition错误。
正确的做法是:是其中一个.c文件定义这个变量,在另外一个.c文件用extern声明
也就是确保只定义一次,而声明则可以多次
因为头文件很容易被不同的.c文件include,生成多个.obj目标文件,因此正确的做法就是不要在头文件中定义全局变量,而应该在.c/.cpp文件中定义