当前位置: 技术问答>linux和unix
关于makefile里面 两个源文件之间 使用全局变量的疑惑
来源: 互联网 发布时间:2017-03-18
本文导语: C语言基础不牢固,请教各位一下:我的makefile工程里面链接有多个源文件,其中两个文件,假设是1.c 跟 2.c吧。如果我在1.c里面定义了一个全局变量 int a; 并且我想在2.c里面使用它,那么按说应该是用关键字e...
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;
能否深入的给我讲解一下是什么原理?
但是我发现如果在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,仅从你的描述来看,这个程序应该是要链接错误的。
|
你的程序是不可能通过的,链接阶段一定报重复定义。
|
你确定两个都是全局变量啊.