`
东边日出西边雨
  • 浏览: 258119 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

全局宏定义

    博客分类:
  • c
阅读更多

      首先我们要理解定义和声明的区别,举个常见的例子,比如有一个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;就会出错。

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics