全局宏定义

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

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值