在KEIL C中,有多个源文件使用到全局变量时,可以在一个源文件中定义全局变量,在另外的源文件中用extern 声明该变量,说明该变量定义在别的文件中,将其作用域扩展到此文件。

例如:有以下两个源文件test1.c,test2.c

//test1.c

char aaa; //定义aaa

func1()

{

char bbb;

aaa = bbb;

}

……

//test2.c

extern char aaa; //把aaa的作用域扩展到此

func2()

{

char ccc;

aaa =ccc;

}

……

如果还有其他文件要用到aaa,用法同test2.c,使用extern char aaa;语句将aaa的作用域扩展到此,然后就可以使用它。

这里要特别注意的是:在使用extern时,不要忘了变量的类型,也就是上面例子变量aaa的修饰符char,不然结果就不是你想要的结果了,aaa的值将不可预料。

本来我想尝试把全局变量定义到头文件里面的,可是屡试不爽,编译器老是报重定义的错,还举上面的例子,具体如下:

//test1.h

#ifndef __TEST1_H__

#define __TEST1_H__

char aaa; //在test1.c的头文件中定义aaa;

func1();

#endif

//test1.c

#include “test1.h”

func1() //在func1中给aaa赋值

{

char bbb;

aaa = bbb;

}

//////////////////////////////////////////////////////////////

//test2.h

#ifndef __TEST2_H__

#define __TEST2_H__

extern char aaa; //在test2.c的头文件中声明aaa为外部变量

func2();

#endif

//test2.c

#include “test1.h” //包括test1.h

#include “test2.h”

func2()

{

char ccc;

aaa =ccc;

}

可是编译器总是报aaa重定义的错,经过改正,编译通过,修改如下:

//test1.h

#ifndef __TEST1_H__

#define __TEST1_H__

extern char aaa; //在test1.c的头文件中声明外部变量aaa;

func1();

#endif

//test1.c

#include “test1.h”

char aaa; //在test1.c中定义aaa;

func1() //在func1中给aaa赋值

{

char bbb;

aaa = bbb;

}

//////////////////////////////////////////////////////////////

//test2.h

#ifndef __TEST2_H__

#define __TEST2_H__

func2();

#endif

//test2.c

#include “test1.h” //包括test1.h

#include “test2.h”

func2()

{

char ccc;

aaa =ccc;

}

也就是说,只要在使用的源文件中定义全局变量,在对应头文件中声明该全局变量为外部变量,即该变量允许外部使用,在其他要使用该变量的源文件中包括该头文件即可。

Keil C 中全局变量 extern 的使用的更多相关文章

  1. Keil C中全局变量的使用

    在KEIL C中,有多个源文件使用到全局变量时,可以在一个源文件中定义全局变量,在另外的源文件中用extern 声明该变量,说明该变量定义在别的文件中,将其作用域扩展到此文件. 例如:有以下两个源文件 ...

  2. keil 工程中多文件编译时全局变量怎么引用

    由于代码较多时,为了代码的工整以及易读性,往往将代码拆分成模块,并书写头文件.但keil中定义全局变量往往是一件头疼的事情. (1)xx.h文件中基本书写的是管脚定义和函数声明,全局变量不能定义在头文 ...

  3. C++项目中的extern "C" {}

    from:http://www.cnblogs.com/skynet/archive/2010/07/10/1774964.html C++项目中的extern "C" {} 20 ...

  4. OC中的extern,static,const

    const的作用: const仅仅用来修饰右边的变量(基本数据变量p,指针变量*p). 被const修饰的变量是只读的. static的作用: 修饰局部变量: 1.延长局部变量的生命周期,程序结束才会 ...

  5. c与c++中的extern const的区别和联系

    最近复习c++,发现了这个东西. c语言里面,我们在一个.c文件中用const定义了一个全局变量后,可以在另一个.c文件中用extern const来引用,但在c++中在链接的时候会报undefine ...

  6. C++中全局变量的那些事儿

    C/C++中的变量分为全局变量.静态全局变量.局部变量和静态局部变量,在<C/C++中静态局部变量的特点与应用>中我们介绍过静态局部变量,今天我们的目标是全局变量. 单个文件中的全局变量 ...

  7. KEIL C51 中嵌入汇编以及C51与A51间的相互调用

    如何在 KEIL C51(v6.21) 中调用汇编函数的一个示例 有关c51调用汇编的方法已经有很多帖子讲到,但是一般只讲要点,很少有对整个过程作详细描述,对于初学者是不够的,这里笔者通过一个简单例子 ...

  8. Keil C51中变量的使用

    引言 8051内核单片机是一种通用单片机,在国内占有较大的市场份额.在将C语言用于51内核单片机的研究方面,Keil公司做得最为成功.由于51内核单片机的存储结构的特殊性,Keil C51中变量的使用 ...

  9. IOS总结 静变量static、全局变量extern、局部变量、实例变量

    1.静态变量 static 什么是静态变量:从面向对象的角度触发,当需要一个数据对象为整类而非某个对象服务,同时有力求不破坏类的封装性,既要求此成员隐藏在类的内部,有要求对外不可见的时候,就可以使用s ...

随机推荐

  1. 幽灵漏洞(Ghost gethost)

    幽灵漏斗简介: 编号CVE-2015-0235的GHOST(幽灵)漏洞是Qualys研究员发现的一个Linux服务上非常严重的安全漏洞,可以被利用来远程代码执行及本地权限提升. 漏洞简要描述 该漏洞存 ...

  2. 关于iPhone音频的那些事

    音频文件(Audio File) 1.有两个概念(1).文件格式(File Format or Audio Containers)——描述文件本身的格式,里面的音频数据可以用不同的编码格式.例如:ca ...

  3. 【Unity】6.7 向量和Vector3类

    分类:Unity.C#.VS2015 创建日期:2016-04-20 一.简介 在虚拟的游戏世界中,与3D有关的数学知识决定了游戏引擎如何计算和模拟出开发者以及玩家看到的每一帧画面.学习或者回想一下基 ...

  4. Java实现单链表翻转

    单链表翻转比方有例如以下链表: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZmVuZ3NoaXp0eQ==/font/5a6L5L2T/fontsize ...

  5. Android 编程下 AlarmManager

    对应 AlarmManager 有一个 AlarmManagerServie 服务程序,该服务程序才是正真提供闹铃服务的,它主要维护应用程序注册的各类闹铃并适时的设置即将触发的闹铃给闹铃设备 ( 在系 ...

  6. ubuntu下安装vmTools, 和共享文件

    如果没有需要下载一个vmTools,我是下载的 然后加载到光驱,然后在ubuntu下面可以找到光驱 解压里面的文件, 我解压到 Documents下面 然后ctrl + alt + t进入控制台 cd ...

  7. Asp.Net MVC TryUpdateModel使用说明

    修改功能每个网站里都有,也有很多写法 写法1:要修改的字段刚好等于表中的字段 [HttpPost] [ValidateAntiForgeryToken] public ActionResult Edi ...

  8. Asp.Net支付宝手机网站支付接口API之C#版

    一.准备工作 1.使用企业支付宝签约手机网站支付 2.下载支付宝官方demo 文档地址:https://doc.open.alipay.com/doc2/detail?treeId=60&ar ...

  9. java RSA 生成公钥私钥

    /** * 引进的包都是Java自带的jar包 * 秘钥相关包 * base64 编解码 * 这里只用到了编码 */ import java.security.Key; import java.sec ...

  10. Linux访问Windows共享目录的方法——smbclient

    之前写过Ubuntu访问Windows共享目录,里面主要介绍如何在GUI上访问windows共享目录. 本文侧重于整理通过命令行访问的方法. 先确保smbclient.ubuntu下可以直接运行下面命 ...