读书人

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

发布时间: 2012-03-11 18:15:39 作者: rapoo

关于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函数处理

读书人网 >C语言

热点推荐