日期:2014-05-16  浏览次数:20870 次

关于makefile里面 两个源文件之间 使用全局变量的疑惑
C语言基础不牢固,请教各位一下:我的makefile工程里面链接有多个源文件,其中两个文件,假设是1.c 跟 2.c吧。如果我在1.c里面定义了一个全局变量 int a; 并且我想在2.c里面使用它,那么按说应该是用关键字extern吧,这样才是对应的同一个内存里面的变量吧。
  但是我发现如果在2.c里面不用extern,而是同样int a;结果是一样的,就是说我在2.c里面操作a,1.c里面的a也是跟着改变的。这是为什么?
  更奇怪的是,如果两个文件都用extern,而没有定义的话,结果还是一样的。

  简单代码如下:
1.c :
  int a;
  a++;

2.c :
  int a;
  printf(" %u ",a);

打印结果a是1;

能否深入的给我讲解一下是什么原理?

------解决方案--------------------
最好能贴出完整的代码和makefile,仅从你的描述来看,这个程序应该是要链接错误的。
------解决方案--------------------
你的程序是不可能通过的,链接阶段一定报重复定义。
------解决方案--------------------
你确定两个都是全局变量啊.