关于Keil中,变量函数跨文件引用报错问题
作者是keil 4的新手,刚上手此编译器,如有不当,敬请斧正!
当我们想象vc一样使用keil里面的全局变量,函数时,明明定义了全局变量,包含了头文件,结果,在keil里要么报重定义错误,要么,干脆报未定义错误!
经过作者的实验,明确了keil 4在编程时,xx.h,xx.c,main.c三者中全局变量和函数定义,及其在main.c引用的使用技巧。
/*---------------------------------------------------------------------------------------------------------
第一个文件,xx.c文件,如test.c,代码如下:
----------------------------------------------------------------------------------------------------------*/
#include "reg51.h"
//1.宏可以用函数的方式返回来运用,最简单的当然是在其它文件再定义一个宏,如 sbit key
#define GPIO_SENSOR P2
//2.sbit 相当于宏定义,不能像全局变量a一样引用,可以在想引用的文件再次定义,如main.c所示
sbit key = P1^2;
//3.全局变量定义在.c文件,在相应的.h文件引用,其它.c文件想引用,可以包含相应.h文件,如main.c包含了"test.h"
int b = 0;
int a = 0;
//1.
void gets()
{
b = GPIO_SENSOR;
}
//2.
int get_a()
{
return a;
}
/*---------------------------------------------------------------------------------------------------------
第二个文件,xx.h文件,如test.h,代码如下:
----------------------------------------------------------------------------------------------------------*/
#ifndef __TEST_H__
#define __TEST_H__
extern void gets();
extern int get_a();
extern int a;
extern int b;
#endif
/*---------------------------------------------------------------------------------------------------------
第三个文件,main.c文件,代码如下:
----------------------------------------------------------------------------------------------------------*/
#include <test.h>
#include "reg51.h"
sbit key = P1^2;
void main(void)
{
gets();
get_a();
a = 0;
key=0x10;
//GPIO_SENSOR = 0X11; 错误
}
工程目录截图如下:
无错误,无警告,代码模块化,耦合性低。
关于Keil中,变量函数跨文件引用报错问题相关推荐
- eclipse中对单独JS文件取消报错的处理
eclipse中对单独JS文件取消报错的处理 eclipse中js文件报错的情况,或许大家早已习以为常了,那么有什么好的方法可以将其忽略掉呢?如果你也在寻找此问题,那么本文或许可以帮助到你 - 忽略某 ...
- ROM-libcore中新加java文件编译报错
背景: 1.安卓9之前,libcore中有一个libcore/io/EventLogger.java,但是安卓10之后却没有了 2.EventLogger可以将进程中所有的event事件,收敛到这里, ...
- eclipse 中文件引用报错不能编译,但引用文件确实存在
方法1:clean工程 方法2: 检查.classpath文件中该引用文件是否被排除在外. 转载于:https://www.cnblogs.com/davidwang456/p/3423776.htm ...
- excel去掉跨文件引用
如果一个工作表的单元格内容引用了其他工作表的单元格的内容,这时如果将这个工作表的内容全部拷贝到另外一个文件的工作表中,引用的公式会改变,引用地址变为绝对地址,还是指向源文件,例如:='C:\Users ...
- python open 打开是什么类型的文件-详解Python中open()函数指定文件打开方式的用法...
文件打开方式 当我们用open()函数去打开文件的时候,有好几种打开的模式. 'r'->只读 'w'->只写,文件已存在则清空,不存在则创建. 'a'->追加,写到文件末尾 'b'- ...
- Excel2010中VLOOKUP函数跨工作簿使用实例:
Excel2010中VLOOKUP函数跨工作簿使用实例: 首先我们打开Excel主页面,其中有三个sheet表:我们将表三"图书编目表"中的"图书编号"导入到表 ...
- linux vscode中添加头文件路径,vscode中c/c++头文件引用找不到飘红
正在进行 GTK 学习, 但是在 vscode GTK 的头文件找不到(头文件引用底下飘红, 逼死强迫症), 影响敲字键入速度. 解决一下该问题-- vscode中c/c++头文件引用找不到(#inc ...
- keil uvisoin软件打开他人的工程文件上面出现黄色感叹号警告标志,后续编译不能生成.o文件而报错
keil uvisoin软件打开他人的工程文件上面出现黄色感叹号警告标志,后续编译不能生成.o文件而报错 解决方案: 第一种:后续编译不能生成.o文件而报错 右键出现感叹号的文件 点击第一个" ...
- (解决)除非另外还指定了 TOP、OFFSET 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效Mybatis-plus 默认分页功能报错
(解决)除非另外还指定了 TOP.OFFSET 或 FOR XML,否则,ORDER BY 子句在视图.内联函数.派生表.子查询和公用表表达式中无效Mybatis-plus 默认分页功能报错 我百度了 ...
最新文章
- python基础教程:名称空间与作用域
- 干货盘点:神策数据深度用户案例传送门
- 随机向量x的协方差阵_【科普】如何正确理解特征值与特征向量
- Windows 7安装 Visual Studio 2010之大战三大回合
- Delphi 2010手动安装indy10.5.7
- vs.Net 2003 安装
- 【谷歌浏览器】国内如何配置谷歌浏览器使用
- 一文理解全文搜索引擎(Lucene、Elasticsearch、Solr)、目录搜索引擎、元搜索引擎的异同
- Proxifier实现指定进程代理IP 雷电模拟器为例
- 你的网名OUT了吗?盘点那些曾经超in的网名
- jsf的verbatim标签
- Oracle 递归查询详解
- 高尔顿的表哥是谁? ^-^ 理解线性与回归---人工智能工作笔记0017
- [转]python各模块的学习
- iOS 10 is the maximum deployment target for 32-bit targets
- 如何设置工业相机中的“自动增益控制”功能?
- 传统手动和上电复位电路
- 关于模拟CMOS集成电路第二章MOS器件物理基础中的公式推导
- jquery最大化窗口
- 华为鸿蒙手表实现除夕夜烟花燃放效果
热门文章
- html静态页面实现微信分享思路
- 钩子教程 - 原理(一)
- Facebook的数据挖掘,从谈情说爱开始
- 解决eclipse启动停在一个空白窗口的问题
- CentOS下部署Hadoop高性能集群
- 2010年11月8日,早会资料(日本的文化节)。
- 力扣题目——121. 买卖股票的最佳时机
- 设置hash后导致的返回问题的解决方案
- 解决默写浏览器中点击input输入框时,placeholder的值不消失的方法
- npm install 报错(npm ERR! errno -4048,Error: EPERM: operation not permitted,)解决方法