c语⾔在头⽂件⾥声明结构体报错,详解keil采⽤C语⾔模块化编程时全局变量、结构体的定义、。。。
⼀、关于全局变量的定义、声明、引⽤:
(只要是在.h⽂件中定义的变量,然后在main.c中包含该.h⽂件,那么定义的变量就可以在main函数中作为全局变量使⽤)
c语言struct头文件⽅法1:
在某个c⽂件⾥定义全局变量后,在其它c⽂件要⽤,则在要⽤c⽂件⾥⽤extern进⾏声明。说来轻巧但还是很多同学会出问题。请看下⾯注意事项⽅可解决!
注:
(1)在定义全局变量时可同时将其初始化
(2)在⽤extern声明时不能再初始化,否则编译器报错
举例:有两个c⽂件分别为one.c和two.c,two中要⽤到one中的全局变量N,怎么办?
答案:在one.c中定义且初始化:u8 N = 0;
再在two.c中声明:extern u8 N;(注:此处不能加= 0)
⽅法2:
同样对于⽅法1中的例⼦,我推荐采⽤⽅法2。
答案:在one.c中定义且初始化:u8 N = 0;
再在one.h中⽤extern声明:extern u8 N;(注:此处不能加= 0)
最后在two.c中包含one.h:#include "one.h"
由于⽅法2的可移植性较⽅法⼀要强,故采⽤2较好!
对⽅法2的总结为:全局变量的定义和初始化放在c⽂件中,声明放在对应的h⽂件中。 且要注意h⽂件⾥应仅有
相应c⽂件⾥的函数和变量的声明,和相应c⽂件⽆关的东西不应该有。
⼆、关于头⽂件的包含:
头⽂件的包含就⽐较简单了:在相应c⽂件⾥⼀⼀包含所需的h⽂件即可。但千万不要将这些头⽂件全部放在c⽂件的相应头⽂件⾥,虽然这样会使c⽂件仅包含了⼀个头⽂件,看起来⽐较简洁,但这样会影响它的h⽂件的“纯洁性”。
在此提醒下新⼿们:要将c⽂件和其对应的h⽂件看成⼀体,即它们互相有着紧密联系;移植时,将它们同时搬⾛就⾏!
三、关于结构体类型的定义:
1、若结构体类型只需要在某个c⽂件中使⽤,那么就在相应c⽂件⾥定义该结构体即可。
2、若结构体类型要在多个c⽂件中使⽤,那么就应该在头⽂件中定义该结构体,再在要⽤它的⽂件中包含结构体定义 所在的头⽂件即可。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。