Keil C 中全局变量 extern 的使用
在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 的使用的更多相关文章
- Keil C中全局变量的使用
在KEIL C中,有多个源文件使用到全局变量时,可以在一个源文件中定义全局变量,在另外的源文件中用extern 声明该变量,说明该变量定义在别的文件中,将其作用域扩展到此文件. 例如:有以下两个源文件 ...
- keil 工程中多文件编译时全局变量怎么引用
由于代码较多时,为了代码的工整以及易读性,往往将代码拆分成模块,并书写头文件.但keil中定义全局变量往往是一件头疼的事情. (1)xx.h文件中基本书写的是管脚定义和函数声明,全局变量不能定义在头文 ...
- C++项目中的extern "C" {}
from:http://www.cnblogs.com/skynet/archive/2010/07/10/1774964.html C++项目中的extern "C" {} 20 ...
- OC中的extern,static,const
const的作用: const仅仅用来修饰右边的变量(基本数据变量p,指针变量*p). 被const修饰的变量是只读的. static的作用: 修饰局部变量: 1.延长局部变量的生命周期,程序结束才会 ...
- c与c++中的extern const的区别和联系
最近复习c++,发现了这个东西. c语言里面,我们在一个.c文件中用const定义了一个全局变量后,可以在另一个.c文件中用extern const来引用,但在c++中在链接的时候会报undefine ...
- C++中全局变量的那些事儿
C/C++中的变量分为全局变量.静态全局变量.局部变量和静态局部变量,在<C/C++中静态局部变量的特点与应用>中我们介绍过静态局部变量,今天我们的目标是全局变量. 单个文件中的全局变量 ...
- KEIL C51 中嵌入汇编以及C51与A51间的相互调用
如何在 KEIL C51(v6.21) 中调用汇编函数的一个示例 有关c51调用汇编的方法已经有很多帖子讲到,但是一般只讲要点,很少有对整个过程作详细描述,对于初学者是不够的,这里笔者通过一个简单例子 ...
- Keil C51中变量的使用
引言 8051内核单片机是一种通用单片机,在国内占有较大的市场份额.在将C语言用于51内核单片机的研究方面,Keil公司做得最为成功.由于51内核单片机的存储结构的特殊性,Keil C51中变量的使用 ...
- IOS总结 静变量static、全局变量extern、局部变量、实例变量
1.静态变量 static 什么是静态变量:从面向对象的角度触发,当需要一个数据对象为整类而非某个对象服务,同时有力求不破坏类的封装性,既要求此成员隐藏在类的内部,有要求对外不可见的时候,就可以使用s ...
随机推荐
- 案例:用Redis来存储关注关系
Redis提供了丰富的数据类型,比起关系型数据库或者简单的Key-Value存储(比如Memcached)来,Redis的数据模型与实际应用的数据模型更相近.比如下面说到的好友关系的存储,原作者使用了 ...
- Oracle connect by 层级结构查询
公司组织架构表:organization 一.查询子级 select * from organizationstart with id='1'connect by prior id = parent_ ...
- C#实现RSA加密与解密、签名与认证
一.RSA简介 RSA公钥加密算法是1977年由Ron Rivest.Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的.RSA取名来自开发他们三者的名字.RSA是目前最有影响力 ...
- OpenCV中图像算术操作与逻辑操作
OpenCV中图像算术操作与逻辑操作 在图像处理中有两类最重要的基础操作各自是图像点操作与块操作.简单点说图像点操作就是图像每一个像素点的相关逻辑与几何运算.块操作最常见就是基于卷积算子的各种操作.实 ...
- sqlserver 时间字符串转化为时间格式
),),),),,)) select substring('D:\\files,3,len('D:\\files)-2) --去掉前两位路径D:
- Android 编程下背景图片适配工具类
package cn.sunzn.util; import android.content.Context; import android.graphics.Bitmap; import androi ...
- Java编译命令整理
引言 近期在做Android相关开发工作,不可避免的需要接触Java层的调用机制,好多年不用Java了,这里整理下相关的编译命令.作为后续参考使用,也防止每次都需要到处查找. 基本概念 javac - ...
- js随机生成一个数组中的随机字符串以及更新验证码
随机生成m,n范围的值得公式: Math.random()*(n-m)+m: 改正公式:Math.random()*(n+1-m)+m // 生成随机字符串function randomMixed(n ...
- LeetCode: Palindrome Partitioning II 解题报告
Palindrome Partitioning II Given a string s, partition s such that every substring of the partition ...
- java 多线程 33: 多线程组件之 Callable、Future和FutureTask
Callable Callable和rRunnable差不多,两者都是为那些其实例可能被另一个线程执行的类而设计的,最主要的差别在于Runnable不会返回线程运算结果,Callable可以(假如线程 ...