C语言 关于在头文件中定义变量的有关问题

C语言 关于在头文件中定义变量的问题?
工程中有一个h头文件module1.h,两个c文件module1.c、module2.c. 代码如下:
module1.h

//module1.h 
int a= 5;


module1.c

#include "module1.h"

extern int Aadd(int b);

int main()
{
int nResult = 0;

a = 50;
nResult = Aadd(5);
return 0;
}


module2.c

#include "module1.h"

int Aadd(int b)
{
return a + b;
}


问题是,编译运行后得到main函数中nResult的结果为55,为什么不是10,不是说头文件中定义变量,在各个包含了头文件的模块中都对应着不同地址单元么?那在main函数中a=50应该是对module1这个模块中的a赋值,而moudle2模块中的a不应该是5吗?我用的是VC6.0编译运行的,希望大家指教,谢谢。
------解决思路----------------------
a定义的时候是5 附值后是50 50➕5 55。你可以单步调试看一看
------解决思路----------------------
如果没记错,头文件会在编译的时候链接a等于5。  10或者55 就是取决于 a的附值顺序的问题。 头文件先附值,主函数后。建议不这么用,程序会有歧义
------解决思路----------------------
引用:
他们不是两个副本吗?赋值应该不受影响才对啊

首先,千万不要在头文件中定义变量,只能在头文件中声明变量。你这种情况,在linux下就直接报“变量重复定义”的错误了。至于VC我不了解它怎么处理这种情况,但应该不是当成两个副本来处理。
------解决思路----------------------
不是说头文件中定义变量,在各个包含了头文件的模块中都对应着不同地址单元么?
-------------------------
这句话哪里说的?

如果你的h文件没有 防止多次include保护机制, 编译会不通过吧,多重定义。
如果是 头文件有 防止多次include保护机制,
这个头文件不会实际上不会被包含2次的,
所以不存在你说的两个副本。


------解决思路----------------------
这种奇葩编译能通过????是地球人开发的编译器吗?

两个副本???谁教你的?拉出来枪毙五百次!
------解决思路----------------------
C语言基本要求
不要在头文件中定义变量或者函数。
------解决思路----------------------
a是全局变量,也就是说所有包含头文件"module1.h"中用的变量a是同一个变量a
所以main函数中a=50后,变量a值就变成50了
------解决思路----------------------
引用:
C语言基本要求
不要在头文件中定义变量或者函数。


楼主为啥要在头文件中定义个a呢,有什么意义呢?

引用:
a是全局变量,也就是说所有包含头文件"module1.h"中用的变量a是同一个变量a
所以main函数中a=50后,变量a值就变成50了

main函数中的a赋值就将头文件中a的赋值覆盖了


------解决思路----------------------
是啊,a是全局 然后  初始化的时候给了5  然后执行的时候是先用50覆盖了5,最后加的5   

a是整个程序的全局,是共用的