作者是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中,变量函数跨文件引用报错问题相关推荐

  1. eclipse中对单独JS文件取消报错的处理

    eclipse中对单独JS文件取消报错的处理 eclipse中js文件报错的情况,或许大家早已习以为常了,那么有什么好的方法可以将其忽略掉呢?如果你也在寻找此问题,那么本文或许可以帮助到你 - 忽略某 ...

  2. ROM-libcore中新加java文件编译报错

    背景: 1.安卓9之前,libcore中有一个libcore/io/EventLogger.java,但是安卓10之后却没有了 2.EventLogger可以将进程中所有的event事件,收敛到这里, ...

  3. eclipse 中文件引用报错不能编译,但引用文件确实存在

    方法1:clean工程 方法2: 检查.classpath文件中该引用文件是否被排除在外. 转载于:https://www.cnblogs.com/davidwang456/p/3423776.htm ...

  4. excel去掉跨文件引用

    如果一个工作表的单元格内容引用了其他工作表的单元格的内容,这时如果将这个工作表的内容全部拷贝到另外一个文件的工作表中,引用的公式会改变,引用地址变为绝对地址,还是指向源文件,例如:='C:\Users ...

  5. python open 打开是什么类型的文件-详解Python中open()函数指定文件打开方式的用法...

    文件打开方式 当我们用open()函数去打开文件的时候,有好几种打开的模式. 'r'->只读 'w'->只写,文件已存在则清空,不存在则创建. 'a'->追加,写到文件末尾 'b'- ...

  6. Excel2010中VLOOKUP函数跨工作簿使用实例:

    Excel2010中VLOOKUP函数跨工作簿使用实例: 首先我们打开Excel主页面,其中有三个sheet表:我们将表三"图书编目表"中的"图书编号"导入到表 ...

  7. linux vscode中添加头文件路径,vscode中c/c++头文件引用找不到飘红

    正在进行 GTK 学习, 但是在 vscode GTK 的头文件找不到(头文件引用底下飘红, 逼死强迫症), 影响敲字键入速度. 解决一下该问题-- vscode中c/c++头文件引用找不到(#inc ...

  8. keil uvisoin软件打开他人的工程文件上面出现黄色感叹号警告标志,后续编译不能生成.o文件而报错

    keil uvisoin软件打开他人的工程文件上面出现黄色感叹号警告标志,后续编译不能生成.o文件而报错 解决方案: 第一种:后续编译不能生成.o文件而报错 右键出现感叹号的文件 点击第一个" ...

  9. (解决)除非另外还指定了 TOP、OFFSET 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效Mybatis-plus 默认分页功能报错

    (解决)除非另外还指定了 TOP.OFFSET 或 FOR XML,否则,ORDER BY 子句在视图.内联函数.派生表.子查询和公用表表达式中无效Mybatis-plus 默认分页功能报错 我百度了 ...

最新文章

  1. python基础教程:名称空间与作用域
  2. 干货盘点:神策数据深度用户案例传送门
  3. 随机向量x的协方差阵_【科普】如何正确理解特征值与特征向量
  4. Windows 7安装 Visual Studio 2010之大战三大回合
  5. Delphi 2010手动安装indy10.5.7
  6. vs.Net 2003 安装
  7. 【谷歌浏览器】国内如何配置谷歌浏览器使用
  8. 一文理解全文搜索引擎(Lucene、Elasticsearch、Solr)、目录搜索引擎、元搜索引擎的异同
  9. Proxifier实现指定进程代理IP 雷电模拟器为例
  10. 你的网名OUT了吗?盘点那些曾经超in的网名
  11. jsf的verbatim标签
  12. Oracle 递归查询详解
  13. 高尔顿的表哥是谁? ^-^ 理解线性与回归---人工智能工作笔记0017
  14. [转]python各模块的学习
  15. iOS 10 is the maximum deployment target for 32-bit targets
  16. 如何设置工业相机中的“自动增益控制”功能?
  17. 传统手动和上电复位电路
  18. 关于模拟CMOS集成电路第二章MOS器件物理基础中的公式推导
  19. jquery最大化窗口
  20. 华为鸿蒙手表实现除夕夜烟花燃放效果

热门文章

  1. html静态页面实现微信分享思路
  2. 钩子教程 - 原理(一)
  3. Facebook的数据挖掘,从谈情说爱开始
  4. 解决eclipse启动停在一个空白窗口的问题
  5. CentOS下部署Hadoop高性能集群
  6. 2010年11月8日,早会资料(日本的文化节)。
  7. 力扣题目——121. 买卖股票的最佳时机
  8. 设置hash后导致的返回问题的解决方案
  9. 解决默写浏览器中点击input输入框时,placeholder的值不消失的方法
  10. npm install 报错(npm ERR! errno -4048,Error: EPERM: operation not permitted,)解决方法