Keil C 中全局变量的使用

本文详细介绍了KeilC中全局变量的使用方法,包括如何在一个源文件中定义全局变量并在其他源文件中通过extern声明扩展其作用域。同时,文章通过实例解释了如何在头文件中正确声明全局变量,并避免重复定义错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:http://blog.youkuaiyun.com/kulung/article/details/5994876

Keil C 中全局变量的使用

在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 5 中定义使用全局变量 #### 定义全局变量 全局变量是在整个程序范围内都可以访问的变量。为了确保其在整个项目中的可见性和一致性,通常需要遵循以下方法: 1. **声明全局变量** 在某个 `.c` 文件中定义全局变量,并为其分配初始值(如果需要)。例如,在 `main.c` 或其他模块文件中完成初始化操作: ```c int globalVariable = 0; // 初始化为 0 ``` 2. **声明外部引用** 如果希望在其他源文件中使用全局变量,则需通过 `extern` 关键字进行声明。这告诉编译器该变量已在其他地方定义,无需再次分配存储空间。可以在头文件(`.h`)中声明此变量: ```c extern int globalVariable; ``` 需要注意的是,`extern` 声明不应重复,否则可能导致链接错误[^2]。 #### 使用全局变量全局变量被正确定义和声明后,即可在其作用域内的任何位置使用它。以下是具体的操作流程: 1. **修改全局变量的值** 可以在任意函数中更改全局变量的内容。例如: ```c void modifyGlobal() { globalVariable += 10; // 修改全局变量的值 } ``` 2. **读取全局变量的值** 同样可以通过简单的赋值语句或其他逻辑操作获取全局变量的状态: ```c void readGlobal(int *value) { *value = globalVariable; // 将全局变量的值传递给指针参数 } ``` 3. **调试过程中的监视功能** 在 Keil 5 调试模式下,可以利用“Debug”窗口下的“Watch”选项卡实时观察全局变量的变化情况。只需右击目标变量并选择“Add Watch”,随后可指定显示格式(如十进制、十六进制等),从而更直观地分析程序运行状态[^1]。 #### 注意事项 - 确保全局变量仅在一个源文件中定义,而其余部分只负责声明。 - 若多个模块尝试重新定义同一名称的全局变量,可能会引发链接阶段冲突。 - 新版开发工具链(如 VC++6.0)可能对 C/C++ 标准有所调整,故建议始终依据当前所用 IDE 的官方文档为准[^2]。 ```c // main.c #include "global_header.h" int globalVariable = 0; void initializeGlobal() { globalVariable = 42; // 设置初始值 } // another_module.c #include "global_header.h" void useGlobal() { printf("The value of global variable is %d\n", globalVariable); } ```
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值