keilC51明明已经定义的变量却报错未定义与期待asm

文章目录

  • keil_C51采用的是C89标准:
    • C89变量定义标准:
    • 程序块:
  • expected '__asm':
  • 已经定义某个变量却报错未定义该变量:
    • 从汇编语言中看:

keil_C51采用的是C89标准:

C89变量定义标准:

1. 变量定义位置: 在C89标准中,所有局部变量必须在函数或块的开头定义。这意味着在定义好变量之前不能有其他的执行语句,如scanf或其他函数调用。
2. 变量声明与定义: 在C89中,变量的声明和定义通常是一起进行的。也就是说,当你声明一个变量时,你也必须指定它的类型,并进行初始化(如果需要的话)。
3. 变量作用域: 在C89中,变量的作用域是从定义它的点开始,直到包含它的块或函数结束。如果变量在函数内部定义,那么它的作用域就是该函数内部。
4. 变量存储类别: C89提供了几种变量存储类别,如auto(自动变量,默认)、extern(外部变量)、static(静态变量)和register(寄存器变量)。这些关键字用于指定变量的存储方式和生命周期。
5. 变量初始化: 在C89中,局部变量如果没有显式初始化,它们的初始值是未定义的。这意味着在使用这些变量之前,必须确保它们已经被正确初始化。
6. 命名规则: 变量名必须遵循一定的命名规则,如首字符必须是字母或下划线,不能使用汉语拼音,不能与关键字及系统预定义的标识符相同等。

程序块:

  • 在计算机科学和编程中,程序块(也称为代码块、语句块或块)通常指的是一组一起执行的语句。这些语句通常被包含在某种类型的结构或控制流语句中,如循环、条件语句(如if-else)、函数或方法定义等。

程序块的主要特点包括:
1. 局部性: 块内的变量和常量只在块内部可见。这有助于封装和组织代码,同时减少潜在的命名冲突。
2. 控制流: 块允许程序员控制程序的执行流程。例如,循环块允许重复执行一组语句,直到满足某个条件为止;条件块则允许根据特定条件执行不同的代码路径。
3. 作用域: 块定义了变量的作用域。在块内部声明的变量在块外部是不可见的,除非这些变量被声明为全局变量或具有其他特殊的可见性属性。

expected ‘__asm’:

原因: 变量定义的位置不是在程序块的开头。
在这里插入图片描述
解决办法: 根据C89标准,只需要将变量定义放在程序快的开头或者将它定义为全局变量。

已经定义某个变量却报错未定义该变量:

在这里插入图片描述
原因: C89标准中,局部变量的生存周期仅在它所被定义的程序块呢,图片中,position是在if语句的程序块内被定义的,所以只有if的花括号内这个变量存在。

从汇编语言中看:

在这里插入图片描述

  • 我分别在if和while的程序块内定义了position_1和position_2,调试之后可以看到,在一开始程序把0x01这个地址分给了position_1,然后出了if语句之后进入到while的程序块内,又将0x01这个地址分给了position_2,也就是说出了if语句之后position_1的内存就被回收了,它就不存在了。

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

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

相关文章

固态存储是未来|浅析SSD架构的演进与创新技术-1

常见的SSD架构中,包括了SSD控制器、NAND颗粒、DRAM颗粒三大组件,SSD控制器的固件需要兼顾坏块管理、ECC纠错、垃圾回收GC、磨损均衡WL、NAND die介质管理、缓存交互等等。 随着时代的发展,SSD架构,也不断有新的挑战和需求。基于小…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的交通标志识别系统详解(深度学习模型+UI界面代码+训练数据集)

摘要:本篇博客详细介绍了利用深度学习构建交通标志识别系统的过程,并提供了完整的实现代码。该系统采用了先进的YOLOv8算法,并与YOLOv7、YOLOv6、YOLOv5等早期版本进行了性能评估对比,分析了性能指标如mAP、F1 Score等。文章深入探…

stm32f103c8t6学习笔记(学习B站up江科大自化协)-USART串口-硬件部分

通信协议简介 USART串口 硬件电路 通信距离: TTL和RS232通信距离只有几十米 RS485电平通信距离可达上千米 应用场景: TTL用于单片机这种低压小型设备 RS232一般在大型机器上使用,由于环境比较恶劣静电干扰比较大,所以电压电平比…

javaEE13(网站第8章两个课后题)

1、对“jspservletjavabean实现分页查询”功能做如下补充: (1)记录批量删除:每个记录前添加复选框,点击批量删除,删除选中记录。 增加跳转到任意页功能。用户可改变每页记录条数。 页面&am…

wait 和 notify方法

目录 1.1 wait()方法 wait 做的事情: wait 结束等待的条件: 1.2 notify()方法 1.3notifyAll方法 1.4wait()和sleep()对比 由于线程之间是抢占式执行的, 因此线程之间执行的先后顺序难以预知. 但是实际开发中有时候我们希望合理的协调多个线程之间的执行先后顺序. 完成这个协调…

Python 的练手项目有哪些值得推荐?

Python 是一种强大的编程语言,有许多值得推荐的练手项目。以下是一些例子: 数据分析:利用 Python 的数据分析库(如 pandas 和 NumPy)处理和分析数据。你可以尝试对数据进行清洗、可视化,或者构建简单的预测…

4-LINUX--文件操作命令

一、文件查看命令 1. cat 1.1 查看文件内容,示例如下: 1.2 合并文件,示例如下: 1.3 往文件中写入数据, Ctrld 是结束输入,示例如下: 2. more 当一个文件的内容超过一个屏幕能显示的行数…

PCL点云处理之最小二乘球面点云拟合(直接拟合法,完整实验)(二百三十一)

PCL点云处理之最小二乘球面点云拟合(直接拟合法,完整实验)(二百三十一) 一、算法介绍二、算法实现1.代码2.结果一、算法介绍 现在假设有这样一群点云,它们分布在一个球的表面,可能并不严格,带有些许噪声,此时我们需要计算球心坐标和球的半径。(这里提供完整的实验过…

[leetcode] 43. 字符串相乘

文章目录 题目描述解题方法相乘累加java代码复杂度分析 题目描述 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。 注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整…

怎么免费下载无水印视频素材?赶快收藏这六个网站。

今天来教大家怎么下载无水印视频素材,其中一些是免费的,并且可以在商业项目中使用,这些网站都是无水印视频素材,可以放心使用。 蛙学网: 网站的内容非常丰富多彩,包括风景,夜景,食物…

怎么判断你的模型是好是坏?模型性能评估指标大全!

模型性能评估指标,大家一定不陌生!很多小伙伴们都说难,但是它真的很重要很重要很重要!它会对我们的模型有很多的指导,也会给我们真正做模型的时候提供一些指导性的思想,不然我们看到别人的东西只能跟着人家…

阳光保险MySQL数据库平稳迁移OceanBase,稳定运营超700天

作者简介: 车东兴:于阳光保险就职,深耕保险行业的 IT 领域长达12 年,对保险领域的基础架构实践有深刻的理解与掌握。熟悉多款数据库,具有丰富的数据库运维经验。 王华城:于阳光保险就职,10多年一…

Eclipse安装springboot

Eclipse免费,套件丰富,代码开源,功能强大…推荐! 1 下载eclipse: https://www.eclipse.org/downloads/download.php?file/technology/epp/downloads/release/2023-12/R/eclipse-jee-2023-12-R-win32-x86_64.zip 2 安装Spring框…

【Vue3】什么是路由?Vue中的路由基本切换~

💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢…

AI写真变现项目丨超级训练营SOP手册

出品方: 吴东子团队 x AI破局俱乐部 以下只是该SOP手册的部分介绍,AI写真变现项目上手到变现全流程,需要完整手册的可以dd我。 AI写真 首先什么是AI写真,顾名思义的话可以说成是用AI生成写真照,我们先暂且这么理解&am…

学习数据节构和算法的第15天

单链表的实现 链表的基本结构 #pragma once #include<stdio.h> typedf int SLTDataType; typedy struct SListNode {SLTDataType data;struct SListNode*next; }SLTNode;void Slisprint(SLTNode*phead);打印链表 #include<stdio.h> void SListPrint(SLTNode*phe…

springboot+nacos使用

依赖 nacos服务发现和注册的依赖 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency><dependency><groupId>com.alibaba.cloud</g…

【掌握版本控制:Git 入门与实践指南】操作仓库文件|分支管理

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;泥中に咲く—ウォルピスカーター 0:34━━━━━━️&#x1f49f;──────── 4:46 &#x1f504; ◀️ ⏸ ▶…

基于Springboot的高校汉服租赁网站(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的高校汉服租赁网站&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…

【清晰易懂】@Mapper注解和BaseMapper爱恨情仇

此问题的提出在于自己没有弄明白一个问题&#xff0c;就是Mapper注解有时候可以不加&#xff0c;有时候又需要加。 先说结论&#xff1a;Mapper注解和BaseMapper类在项目中起着相同的作用&#xff0c;都是为了实现数据库基本简单的CRUD&#xff0c;省去在xml文件中再去写&#…