首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

多个.c资料共用同一个变量

2013-06-26 
多个.c文件共用同一个变量a.c文件如下#define MAX_LEN 100char FileContent[MAX_LEN]void showtest(){Fil

多个.c文件共用同一个变量
a.c文件如下

#define MAX_LEN 100
char FileContent[MAX_LEN];

void showtest()
{
FileContent[0] = 999;
printf("showtest:%d, %d\n", sizeof(FileContent), FileContent[0]);
}

a2.c文件如下
#define MAX_LEN 20
char FileContent[MAX_LEN];

void showtest2()
{
//FileContent[0] = 999;
printf("showtest2:%d, %d\n", sizeof(FileContent), FileContent[0]);
}


main.c文件如下

int main(int argc, char *argv[])
{
showtest();
showtest2();
  return 0;
}


结果如下

showtest:100, -25
showtest2:20, -25


之前,我的第一个疑问是,为什么char数组,同一个变量名,在不同的.c文件中定义, 它们的数据总是一样的.
那个问题没什么人回答,而唯一的一个人回答说,C语言里,只要不加static,默认是extern的,所以两边是一样的.函数默认是extern这我知道. 但我疑惑,为什么int 变量什么的,默认不是extern,会造成重复定义.难道只有数组默认是extern,可以多文件引用?

当时没太在意,一直多文件同时引用同一个数组,没加extern,也没出问题.

今天这个,太奇怪了.showtest里明明把FileContent[0]=999了,但输出立马就变了.
哪位大神能解释一下?
[解决办法]
我只能解释一个问题就是 -25就是999。至于为什么允许外部链接变量两个声明不一样到底是bug还是什么我就不知道了。
[解决办法]
1、引用printf函数,需要#include <stdio.h>
2、char类型最大是127,所以把999改为99吧,不然就溢出了
3、不管编译器如何处理,用同样的变量最好只声明一次,例如在a2.c中加上extern
[解决办法]
int 转char 越界了

热点排行