在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中全局变量的使用的更多相关文章

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

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

  2. Keil C51中变量的使用

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

  3. [51单片机] Keil C51中变量的使用方法详解

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

  4. Keil环境中建立带FreeRTOS的STM32L项目

    本文是网上转载,版权所有. Keil环境中建立带FreeRTOS的STM32L项目 1.先把source文件夹复制至project目录,然后在keil中添加RTOS文件,如图: 其中heap_2.c按 ...

  5. 在keil 4中添加stc系列芯片的方法--【sky原创】

    在keil 4中添加stc系列芯片的方法: 1.从官网下载uv3.cdb的文件网址是:http://www.stcmcu.com/ 2.下载好后把uv3.cdb文件改成STC.cdb:3. 然后将[S ...

  6. keil MDK中如何生成*.bin格式的文件

    在Realview MDK的集成开发环境中,默认情况下可以生成*.axf格式的调试文件和*.hex格式的可执行文件.虽然这两个格式的文件非常有利于ULINK2仿真器的下载和调试,但是ADS的用户更习惯 ...

  7. Keil µVision4 中出现中文乱码的解决办法

    首先得说一下,以前都没有遇到过类似的问题,但是看到有个同学曾经满篇的乱码那叫个心疼. 这里我所说的办法其实只是格式转换的问题,对于其他原因造成的,可能会在以后遇到的时候再来处理了.另外,在将代码文件转 ...

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

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

  9. keil Ax51中条件编译指令IF与$IF的区别

    keil A51中条件编译指令IF与$IF的区别:1.IF和$IF是不等价的,不要混淆了;2.带前缀$的条件编译$IF用法:(汇编器指示命令Assembler Directive)只能用来测试由$SE ...

随机推荐

  1. cocos2dx游戏项目总结(持续更新)

    1.在一个layer里面,尽量只使用一种按钮类型.如MenuItem or CCControlButton.因为这两种按钮的优先级不同,在使用过程中会互相影响到事件触发的先后顺序. 2.细节的问题要一 ...

  2. ubuntu中安装jdk 分类: java 学习笔记 linux ubuntu 2015-07-06 17:49 74人阅读 评论(0) 收藏

    参考文献:ubuntu 13.04 安装 JDK 先去oracle官网下载jdk,这一段我就不赘述了. 下载好之后先解压,解压方式参见 linux常用的压缩与解压缩命令 ,解压之后,将文件剪贴至/us ...

  3. fsdfasfsa

    http://www.cnblogs.com/daniel206/archive/2008/01/16/1041729.html using System.IO;using System.Net;us ...

  4. 多维数组遍历PHP

    原文出处 <?php /* * ------------------------------------------------- * Author : nowamagic * Url : ww ...

  5. jQuery Ajax(load,post,get,ajax)用法与详解

    今天看到群里面有网友们问到Jquery Ajax的(load,post,get,ajax)之间的区别,现在整理了一篇文章出来,希望可以帮到网友们,首先我们先来看一些简单的方法, 这些方法都是对jQue ...

  6. PL/SQL 中文转换为\uxxxx格式(unicode)

    用plsql生成json的时候,经常要处理中文的情况. SELECT replace(asciistr('你好,,hello'),'\','\u') FROM dual 输出:\u4F60\u597D ...

  7. 由C到C++的学习 ----Essential C++

    一.array[] 与 vector<int> vector1 1 array[] <- 此中要填写数组的大小,而且array[]自己是不知道自己的大小的 2.1 vector< ...

  8. windows注册表的基本使用——示例

    上网找好多资料发现一个问题就是太老.例如只有RegCreateKey而没有RegCreateKeyEx用法详解,自己摸索了几个小时终于基本用到的几个函数都试用了一遍. 下面代码已经通过编译测试 // ...

  9. javascript判断设备类型-手机(mobile)、安卓(android)、电脑(pc)、其他(ipad/iPod/Windows)等

    使用device.js检测设备并实现不同设备展示不同网页 html代码: <!doctype html> <html> <head> <meta charse ...

  10. AS3.0定义变量的访问范围

    在AS3.0中变量的默认访问范围是:internal:包内成员可以访问,包外不可访问.AS2.0默认访问范围是public