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