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

关于extern的使用,很奇怪的地方.解决方法

2012-03-11 
关于extern的使用,很奇怪的地方.a.c如下:main(){printf( hi!!!\n )externintt1if(t1)printf( passt1

关于extern的使用,很奇怪的地方.
a.c如下:
main()
{


printf( "hi!!!\n ");
extern   int   t1;if(t1)printf( "pass   t1   =%d\n ",t1);  //?


}


b.c如下:

int   t1   =100;


在a.c文件加注释?的行两边加大括号即可编译通过,如直接编译上面的两个模块则不能通过编译,请问是什么原因.使用ads1.2环境下的armcc.

[解决办法]
那是你 a.c 和b.c两个文件要链接到一块才能成为一个exe文件
如果两个文件单独编成各自的exe就没有这个问题了

也就是说一个exe中变量的定义要求唯一
你int a; 是定义a;
你exeten int a;
是申明a而不定义

[解决办法]
b.c如下:

int t1 =100;
————————————————————————————————————
这个应该是这样的吧
b.h
int t1 =100;

然后
a.c如下:
#include "b.h "
main()
{


printf( "hi!!!\n ");
extern int t1;if(t1)printf( "pass t1 =%d\n ",t1);  //?

}

[解决办法]
问题不在extern,c文件中,变量的声明需要写在程序段的开始处
改成这样就行了

extern int t1;if(t1)printf( "pass t1 =%d\n ",t1);  //?
printf( "hi!!!\n ");

加大括号是限定了变量的使用域,编译可能将这段代码当成inline函数处理

热点排行