1 我新建了一个new.uvproj
2 其中包括main.c a.c a.h b.c b.h 还有define.h(其中包括数据的申明和I/O口的定义)
3 我在define.h中定义了一个全局变量extern unsigned int Temperature_Temp;
4 这个变量在a.c中用到,所以在a.c中如下定义unsigned int Temperature_Temp;
5 在main.c中也要用到这个全局变量,那我还要在这个.c文件中再定义一次?我试过,这样keil报错,重复定义~~~
我的问题是:那我在a.c中使用extern定义,即extern unsigned int Temperature_Temp;
那按照我的理解:因为已经定义为全局变量了,那在main.c中就不需要定义了,这样理解对不对???
实验结果:这样keil虽不报错,可是出现很多警告!!!为什么???
后来,我在a.c中将其定义为extern unsigned int Temperature_Temp;
在main.c中将其定义为unsigned int Temperature_Temp;
就可以了(没有警告,也没有错误),可是,我百思不得其解,求大神指教~~~
请教大神:
可是我在define.h中已经使用extern声明了,后面在main.c和a.c中干嘛还需要使用extern?求大神指教~~~
你的main.c里面要include这个.h才可以的不用extern。另外.c和.h里面同时extern是不会报错的呀。
extern只是一个声明,并不是真正的实现,所以extern很多次都没有关系,但是实现只能有一次。
1、三个.c里面都有extern,没有一个里面有实现。编译通过,链接报错变量找不到。
2、三个.c里面都有实现。编译通过,链接报错变量重复定义。
3、一个实现,其他使用extern,编译链接都能通过。