????? 首先我们要理解定义和声明的区别,举个常见的例子,比如有一个common.c文件中有这样一句话
?
int var = 7;
?然后其对应的common.h文件中有这样一句:
int var;
?那么上面一句叫做“定义”,下面一句叫“声明”。
定义为变量分配了存储空间,而声明没有。
声明可有多处,而定义只能在一处.声明不能做初始化.
?
下面是网友的话:
?
声明是告诉编译器“我存在!”。定义是告诉编译器“我是干什么的!”。
就象你去图书馆
声明:我们图书馆里有这本书。
定义:书的内容
?
??? 在ucos2操作系统源码中,出现了全局宏定义这个东西,虽然初学起来有点困难,一但掌握,写起程序来会更灵活。
一个庞大的程序会有不少的全局变量存在,为了使代码整洁,将全局变量定义在了一个文件中,比如在common.c中。
#include "common.h" int a = 10; char buf[50] = "china";
?
a和buf就是全局变量。在common.h中对两个变量进行了声明,如下:
#ifndef COMMON_H_INCLUDED #define COMMON_H_INCLUDED #define OS_COMMON int a; char buf[50]; #endif // COMMON_H_INCLUDED
?
然后我如果想在main.c文件中使用他们,怎么办,可以直接用extern int a;声明外部变量,就可以用。也可以#include
“commmon.h” 然后就可以直接用了。在没有其他文件的干预下两种方法都可以,没有任何问题。但是,如果工程很庞大,main.c包含了若干个(很多个)头文件
//main.c #include "a.h" #include "b.h" #include "c.h" #include "d.h"
?
你知道这些模块中有没有包含过common.h呢。如果包含了,那么再extern int a;就会出错。
?
?
?
?