extern关键字的使用。keil中编译时,出现error:identifier xxx is undefined

问题

编译时,出现error: identifier “Reg_Flag” is undefined
extern Reg_Flag reg_flag;

很奇怪,我明明已经定义了。无非就是定义是在extern的下面,会不会是这个原因?
在这里插入图片描述

解决

果然,把extern的部分放到结构体定义的下面之后,编译成功了。那这是为什么呢?

typedef struct {
    uint8_t DO1;    
    uint8_t DO2;    
    // 更多成员...
} Reg_Flag;

extern Reg_Flag reg_flag; 

搜索之后了解到:extern关键字用来告诉编译器相应的变量在其他地方定义,但编译器需要在使用extern之前就了解这些变量的类型。如果在使用extern声明变量之前没有定义相应的类型,编译器就不知道这些标识符代表什么类型的变量,从而引发“未定义标识符”的错误。

当把extern声明移动到相应的结构体类型定义之后,编译器已经识别了这些类型,因此能够正确地识别extern声明的变量类型。

补充

'extern’关键字:用于声明一个变量或函数是在别处定义的,意味着它告诉编译器期望在其他地方找到这个变量或函数的定义。
【注】
(1)首先要确保使用’extern’关键字引用的变量的类型都已经被定义。
(2)类型定义后,再用’extern’声明这些外部变量,这样编译器能够理解这些变量的完整类型信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/607015.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

3D模型如何实现拖拽打开?---模大狮模型网

在当今数字化时代,3D技术的应用已经深入到各行各业,为用户带来了更加丰富、生动的体验。然而,对于一些用户来说,打开和查看3D模型可能会面临一些困难,特别是在无法拖拽打开时。本文将为您揭示解决这一问题的方法&#…

智能商品计划系统:引领未来零售业的革新之路

随着科技的飞速发展,人工智能(AI)和大数据技术已成为推动各行业革新的关键动力。在零售行业中,智能商品计划系统的出现,正逐步改变着传统的商品规划与管理方式,为品牌注入新的活力与竞争力。本文将对智能商…

TMS320F280049 CLB模块--总览(0)

CLB模块是可配置的逻辑块,和FPGA的CLB有些不同。 下图是CLB模块在系统中的交互,图中CLB XBAR和TILE是CLB。从049中有4个CLB,也就是TILE1-4。 下图是CPU和CLB交互的示意图。 下图是CLB的时钟。 参考文档: TMS320F28004x Real-Tim…

欢乐钓鱼大师内置辅助,游戏脚本!自动操作!

在《欢乐钓鱼大师》游戏中,探索珍稀鱼类成为钓鱼大师的过程充满了乐趣和挑战。下面是一些特殊鱼类的钓鱼技巧和详细攻略,助你在游戏中获得更好的成绩和丰厚的奖励。 一、碘化之齿 碘化之齿是游戏中一种珍稀的鱼类,它的出现需要一定的条件和技…

STC8增强型单片机开发 【GPIO的理解⭐⭐】

目录 一、引言 二、GPIO概述 三、GPIO的功能 1. 输入功能: 2. 输出功能 四、GPIO的配置方法 1. 选择GPIO端口和引脚: 2. 设置GPIO模式: 3. 配置GPIO参数: 五、GPIO应用实例 1. 硬件连接: 2. 编程实现&…

探索精酿啤酒:从经典到创新

Fendi club啤酒一直以来都以其卓着的品质和与众不同的口感深受消费者喜爱。而随着时代的变迁和消费者口味的不断变化,Fendi club啤酒也在不断地探索和创新,以满足市场的多样化需求。 在经典的口感和风味基础上,Fendi club啤酒不断地尝试新的原…

sql Server2015安装——参考的教程

1.sql Server安装包来自:https://mp.weixin.qq.com/s/Pe_YbWw_MgwjzzZhQWIYfA 2.需要的替换文件和补丁:https://blog.csdn.net/Auspicious_air/article/details/108315154 https://blog.csdn.net/m0_60477996/article/details/126748477 3.安装manger…

MybatisPlus 构造器wrapper的使用与原理

系列文章目录 MyBatis缓存原理 Mybatis plugin 的使用及原理 MyBatisSpringboot 启动到SQL执行全流程 数据库操作不再困难,MyBatis动态Sql标签解析 Mybatis的CachingExecutor与二级缓存 使用MybatisPlus还是MyBaits ,开发者应该如何选择? My…

极简—springMVC工作流程

1、流程图 2、流程 发起请求:客户端通过 HTTP 协议向服务器发起请求。前端控制器:这个请求会先到前端控制器 DispatcherServlet,它是整个流程的入口点,负责接收请求并将其分发给相应的处理器。处理器映射:DispatcherS…

SDN和SD-WAN的对比

在数字化浪潮的推动下,SDN(软件定义网络)和SD-WAN(软件定义广域网)作为企业网络技术的两大支柱,正逐步引领网络架构的革新。尽管两者在理念和基础上有所共通,但在实际应用、功能特性和部署策略上…

视频号小店不直播怎么出单?这里面的秘密,一篇文章全曝光!

大家好,我是电商糖果 这两年关于视频号搞电商的话题度非常高,也吸引了很多商家入驻。 视频号因为背后巨大的私域流量池扶持,所以它的转化率非常高。 根据官方发出来的战报,我们也可以看出它的数据是翻倍增长。 在2024微信公开…

52. 【Android教程】网页视图:WebView

在前面的章节我们所围绕的全部都是纯客户端开发,我们叫 Native 开发。这样的好处就是体验和性能会非常好,但是在实际的使用中我们会发现存在大量的 H5 页面。这样就可以结合 Native / H5 双端的优势完成一个混合开发,而在这种开发模式中首当其…

Photoshop 2022 for Mac/win:释放创意,打造专业级的图像编辑体验

在数字图像编辑的世界里,Adobe Photoshop 2022无疑是那颗璀璨的明星。这款专为Mac和Windows用户设计的图像处理软件,以其卓越的性能和丰富的功能,赢得了全球数百万创作者的青睐。 Photoshop 2022在继承前代版本强大功能的基础上,…

QGraphicsView实现简易地图11『指定层级-定位坐标』

前文链接:QGraphicsView实现简易地图10『自适应窗口大小』 提供一个地图初始化函数,指定地图显示的中心点和地图缩放层级 能够让地图显示某一层级的瓦片,并将中心点坐标显示在视图中心。 1、动态演示效果 7级地图-大连-老虎滩 定位到 8级地图…

ChatGLM3大模型本地化部署、应用开发与微调

文章目录 写在前面ChatGLM3推荐图书作者简介推荐理由粉丝福利写在后面 写在前面 本期博主给大家推荐一本初学者学习并部署大模型的入门书籍,一起来看看吧! ChatGLM3 ChatGLM3是继一系列先进语言模型之后的又一力作,专为追求高精度和广泛适…

nature《自然》期刊文献怎么在家查看下载

nature《自然》期刊我们都知道,是世界上历史悠久的、最有名望的科学杂志之一。下载该期刊文献是需要使用权限的,如果你没有nature《自然》期刊的资源,又该如何获取呢?请看本文的经验分享。 一、先百度“文献党下载器” 在文献党下…

力扣HOT100 - 153. 寻找旋转排序数组中的最小值

解题思路&#xff1a; 与33题类似。 class Solution {public int findMin(int[] nums) {int l 0;int r nums.length - 1;if (nums[r] > nums[l]) return nums[0];while (l < r) {int mid l (r - l) / 2;if (nums[0] > nums[mid]) {r mid - 1;} else {l mid 1…

如何在树莓派 Raspberry Pi中本地部署一个web站点并实现无公网IP远程访问

文章目录 前言1. 安装 Raspberry Pi OS2. 测试 web 站点3. 安装静态样例站点4. 将web站点发布到公网4.1 安装 Cpolar4.2 cpolar进行token认证4.3 生成cpolar随机域名网址4.4 生成cpolar二级子域名4.5 将参数保存到cpolar配置文件中4.6 测试修改后配置文件4.7 配置cpolar服务开机…

100G ZR4 80KM光模块产品亮点有哪些

之前的文章我们介绍了100G ZR4 80KM光模块的产品特征以及技术原理等&#xff0c;那本期文章我们来了解一下易天第二代100G ZR4 80KM光模块的产品亮点。 首先我们通过下面这张表格以最直观的方式来了解第一代和第二代100G ZR4 80KM光模块在工作温度、功耗、FEC纠错等方面有哪些…

Vue CLI配置代理、2.0、3.0

一、vue cli2.0 代理配置 proxy: {/api:{target: "http://localhost:8067",pathRewrite: {/api: }}, } 一、vue cli3.0 代理配置 proxy: {/api: {target: http://localhost:8067,pathRewrite: {/api: }} }