本帖最后由 10xjzheng 于 2016-7-18 09:43 编辑
C语言全局变量的生命与定义 .pdf
(723.58 KB, 下载次数: 110)
2016-7-18 09:33 上传
点击文件名下载附件
昨天师弟问拿了一个程序跟我说,师兄,为什么在h文件中定义会出现重复定义呢?但是我在前面的按键模块化给出的例程中就可以在h文件中定义变量而且不会出现错误呢?如下图所示,我定义了一个控制时间片的全局数组Task_Delay[NumOfTask],这个数组的声明和定义只有在include.h,然后c文件如果要用到这个数组只要#include"include.h"就可以了。
首先来说下为什么一般方法在h文件中定义变量会出现错误。include这个操作相当于把h文件整个放到#include这个文件的地方,那么如果你在一个h文件里面定义一个变量,并且把这个h文件include到不同的c文件中去,那么不同的c文件都有这个定义了!自然会出现重复定义的错误。那么为什么我就可以呢?因为我在定义这类全局变量的时候在其前面加了TASK_EXT,如上图所示,如果这样子可以,那么就很方便全局变量的定义,不然搞到要一个C文件进行定义,多个文件进行声明,这里一个就搞定。但是别玩过火了,所有的变量都这样子搞会搞死你自己的,因为全局变量定义一多,这个工程一复杂,有时调试起来就不说很方便,都不知道哪里修改了这个变量,调试了半天,才知道原来某个C文件也有代码修改这个变量。以为这个技巧是从μC/OS-III里面学到的,我之前刚好写过,下面就摘抄出来给大家看看。
QQ截图20160718093715.png (176 KB, 下载次数: 0)
下载附件
2016-7-18 09:32 上传
我宁愿把问题都变成c定义,h声明,h里定义的少用为好。
一周热门 更多>