独闷闷网

 找回密码
 立即注册
搜索
查看: 2300|回复: 2
收起左侧

[求助] 关于在头文件中 与.c源文件中定义变量的问题(待解决)

[复制链接]
发表于 2015-1-2 17:02:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
MW)IYFY_PS5%I_CS_6IOFRR.png
编程进行模块化的时候,函数作为一个实现功能的工具,可以进行封装,然后放在头文件中,随意调用。
但是,定义在变量是不是尽量不要定义在头文件中 ,有以下问题:(全是关于变量的)
1. 头文件里面为啥只能声明变量,却不能给变量赋值
2. 假设我现在已经用  extern unsigned char temperature;申明了temperature,编译过后默认值为多少?
3. 假设在.h里面申明了,是不是还要在要用该变量的.c源文件中还要重新赋一次初值,那么我觉得那还不如不在头文件中定义,但是下面有个问题:
4. 根据第三个问题的情况假如:(大家注意下我红色的地方我有问题)

9SILZNP6CW[(KOIVJ{K9G09.png A`R9S$LS9QUKWKA1LJQXGL3.png
一般我们进行模块化编程的时候显示和键盘是分开写的,这样的话我们只能在.h 文件中进行声明,但是我们不能赋值,如果要是两面都定义并赋值,那就会出现重定义的情况,那这种情况该怎么解决。
5. 还有个奇葩问题:
放在头文件中ds18b20不能运作,但是我放在
4[UO@89Q5S)OVP(W}YNA`FU.png E9)40@[~D}~UJ7VN~LI1CNB.png
为啥又可以了,我知道这些全部是关于变量的问题,麻烦大家解答下

乐于分享,勇于质疑!
发表于 2015-1-2 20:32:24 | 显示全部楼层
本帖最后由 jianhong_wu 于 2015-1-2 20:43 编辑

推荐你仔细看看我连载文章中的:第六十八节:单片机C语言的多文件编程技巧。里面有详细的讲解。看懂了,你以上的问题就不攻自破。我第68节内容是告诉你这个游戏规则。你只要遵循这个游戏规则,就不会报错了。游戏规则不是用来解释的,是用来遵循的。


1. 头文件里面为啥只能声明变量,却不能给变量赋值?
鸿哥解答:定义的时候,编译器才会赋给变量对应的ram地址内存,声明只是告诉编译器这个变量再别的地方定义过了,可以直接用了。因此定义只能出现一次,并且可以赋初值。声明可以出现多次,不能赋初值。

2. 假设我现在已经用  extern unsigned char temperature;申明了temperature,编译过后默认值为多少?
鸿哥解答:取决于.c文件中定义时的初始值,如果.c文件中只是定义没有赋初值,那么就是编译器会给它一个不确定的默认值。

3. 假设在.h里面申明了,是不是还要在要用该变量的.c源文件中还要重新赋一次初值,那么我觉得那还不如不在头文件中定义,但是下面有个问题:
鸿哥解答:可以声明多次,但是必须定义一次。你定义的时候可以赋初值,也可以不赋初值。

4. 根据第三个问题的情况假如:(大家注意下我红色的地方我有问题)

鸿哥解答:其它的问题我建议你还是先仔细研究我第68节内容,里面有详细的规则。
乐于分享,勇于质疑!
 楼主| 发表于 2015-1-3 01:24:29 | 显示全部楼层
谢谢鸿哥哈,因为现在才看到40节不到,后面不太清楚,现在去看了,您的程序构架真的很有用,看起很简洁,而且重复次数很多,我就直接用函数封装来优化:lol:lol:lol:lol:lol:lol:lol
乐于分享,勇于质疑!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|独闷闷网 ( 粤ICP备12007667号-2 )

GMT+8, 2020-10-21 09:45 , Processed in 0.170639 second(s), 20 queries .

快速回复 返回顶部 返回列表