再问您 一个问题,51单片机上的C语言问题及uCOS问题.
用Keil给51单片机编程的时候,我们都有一个共识,就是一般不在头文件中直接定义全局变量,因为这个头文件如果被两个或两个以上的C文件包含的时候,编译器会告诉我们有重复定义...
用Keil给51单片机编程的时候,我们都有一个共识,就是一般不在头文件中直接定义全局变量,因为这个头文件如果被两个或两个以上的C文件包含的时候,编译器会告诉我们有重复定义的错误. 但是,为什么在uCOS里,一个头文件里却定义了多个全局变量呢?我下载了一个uCOS在... 用Keil给51单片机编程的时候,我们都有一个共识,就是一般不在头文件中直接定义全局变量,因为这个头文件如果被两个或两个以上的C文件包含的时候,编译器会告诉我们有重复定义的错误. 但是,为什么在uCOS里,一个头文件里却定义了多个全局变量呢?我下载了一个uCOS在STC90C516AD上的移植,在uCOS_II.H文件里,定义了许多全局变量,而这个头文件被所有的uCOS的C文件包含了,为什么编译器不报错,而且,系统是能够运行的,我已经下载到板中测试过了. 展开
展开
1个回答
展开全部
那个uCOS-II是利用了宏开关。
例如:
Global.h文件里如下定义:
#ifdef
GLOBAL_VAR
unsigned
char
i_var;
#else
extern
unsigned
char
i_var;
#endif
如果在C文件里包含"Global.h"之前,先进行宏定义
#define
GLOBAL_VAR
#include
"Global.h"
那么,就相当于在
这个C文件里定义了
unsigned
char
i_var;
如果在包含之前,没有定义
GLOBAL_VAR
相当于,在这个C文件里引用了i_var,相当于:
extern
unsigned
char
i_var;
例如:
Global.h文件里如下定义:
#ifdef
GLOBAL_VAR
unsigned
char
i_var;
#else
extern
unsigned
char
i_var;
#endif
如果在C文件里包含"Global.h"之前,先进行宏定义
#define
GLOBAL_VAR
#include
"Global.h"
那么,就相当于在
这个C文件里定义了
unsigned
char
i_var;
如果在包含之前,没有定义
GLOBAL_VAR
相当于,在这个C文件里引用了i_var,相当于:
extern
unsigned
char
i_var;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询