独闷闷网

标题: 关于在头文件中 与.c源文件中定义变量的问题(待解决) [打印本页]

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

一般我们进行模块化编程的时候显示和键盘是分开写的,这样的话我们只能在.h 文件中进行声明,但是我们不能赋值,如果要是两面都定义并赋值,那就会出现重定义的情况,那这种情况该怎么解决。
5. 还有个奇葩问题:
放在头文件中ds18b20不能运作,但是我放在
为啥又可以了,我知道这些全部是关于变量的问题,麻烦大家解答下


作者: jianhong_wu    时间: 2015-1-2 20:32
本帖最后由 jianhong_wu 于 2015-1-2 20:43 编辑

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


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

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

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

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

鸿哥解答:其它的问题我建议你还是先仔细研究我第68节内容,里面有详细的规则。

作者: 智能化控制_888    时间: 2015-1-3 01:24
谢谢鸿哥哈,因为现在才看到40节不到,后面不太清楚,现在去看了,您的程序构架真的很有用,看起很简洁,而且重复次数很多,我就直接用函数封装来优化:lol:lol:lol:lol:lol:lol:lol




欢迎光临 独闷闷网 (http://dumenmen.com/) Powered by Discuz! X3.2