Keil中报错:“explicit type is missing(“int“ assumed) _sys_exit(int x)”

2024-04-11 13:20

本文主要是介绍Keil中报错:“explicit type is missing(“int“ assumed) _sys_exit(int x)”,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题

Keil中编译时,出现error:explicit type is missing(“int” assumed) _sys_exit(int x),如图所示:
即:在 _sys_exit 函数的定义中,返回类型未显式声明,因此编译器默认假定它为 int 类型。这通常是因为在函数定义中未指定返回类型。
在这里插入图片描述

解决

很简单,指明函数返回的数据类型,并在函数定义中返回相应的数据类型即可。
如下两种方法都可以:
1,不返回任何值
在这里插入图片描述
2,返回一个整数
在这里插入图片描述

补充

1,这一行用于消除未使用参数的警告,是一种常见的处理方式。

x = x;

2,关于_sys_exit()

_sys_exit() 通常用于嵌入式系统或特定环境中,以替代标准库中的 exit() 函数,这主要用于避免链接标准库的某些部分,特别是与操作系统交互的部分。方法1的实现表示_sys_exit()被调用时不会执行任何操作,它只是一个空函数体,这在嵌入式系统中是合理的。

在嵌入式系统中,特别是在使用裸机编程(没有操作系统)的场景下,标准C库中的某些功能可能并不适用或者不必要。例如,标准C库中的 exit() 函数,它通常用于结束一个程序,并与操作系统进行一些交互,如关闭文件、释放资源等。但在嵌入式环境中,这样的操作可能并不适用,因为嵌入式程序通常是直接在硬件上运行,没有操作系统层的介入。

在这样的情况下,为了防止编译器引入不必要的标准库部分(这可能会增加程序的大小和复杂性),程序员可能会实现自己的 _sys_exit() 函数。在许多编译器中,如果没有定义 _sys_exit(),编译器可能会默认引入标准库的实现,这可能不适合嵌入式系统的要求。

通过定义一个空的 _sys_exit() 函数,实际上是在告诉编译器:“我知道标准库中有一个 exit() 函数,但在我的应用中,我不需要它做任何事情。” 这样,当程序中出现需要调用 exit() 的情况时(例如,当某些库函数内部尝试调用 exit()),它将调用空 _sys_exit() 函数,而不是标准库的版本。这样做的好处是避免了不必要的标准库代码引入,使得嵌入式应用更为精简和高效。

这篇关于Keil中报错:“explicit type is missing(“int“ assumed) _sys_exit(int x)”的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/894195

相关文章

MCU7.keil中build产生的hex文件解读

1.hex文件大致解读 闲来无事,查看了MCU6.用keil新建项目的hex文件 用FlexHex打开 给我的第一印象是:经过软件的解释之后,发现这些数据排列地十分整齐 :02000F0080FE71:03000000020003F8:0C000300787FE4F6D8FD75810702000F3D:00000001FF 把解释后的数据当作十六进制来观察 1.每一行数据

log4j2相关配置说明以及${sys:catalina.home}应用

${sys:catalina.home} 等价于 System.getProperty("catalina.home") 就是Tomcat的根目录:  C:\apache-tomcat-7.0.77 <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c{1}:%L - %msg%n" /> 2017-08-10

Oracle type (自定义类型的使用)

oracle - type   type定义: oracle中自定义数据类型 oracle中有基本的数据类型,如number,varchar2,date,numeric,float....但有时候我们需要特殊的格式, 如将name定义为(firstname,lastname)的形式,我们想把这个作为一个表的一列看待,这时候就要我们自己定义一个数据类型 格式 :create or repla

Jenkins 插件 地址证书报错问题解决思路

问题提示摘要: SunCertPathBuilderException: unable to find valid certification path to requested target...... 网上很多的解决方式是更新站点的地址,我这里修改了一个日本的地址(清华镜像也好),其实发现是解决不了上述的报错问题的,其实,最终拉去插件的时候,会提示证书的问题,几经周折找到了其中一遍博文

【Python报错已解决】AttributeError: ‘list‘ object has no attribute ‘text‘

🎬 鸽芷咕:个人主页  🔥 个人专栏: 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法2.1 方法一:检查属性名2.2 步骤二:访问列表元素的属性 三、其他解决方法四、总结 前言 在Python编程中,属性错误(At

DBeaver 连接 MySQL 报错 Public Key Retrieval is not allowed

DBeaver 连接 MySQL 报错 Public Key Retrieval is not allowed 文章目录 DBeaver 连接 MySQL 报错 Public Key Retrieval is not allowed问题解决办法 问题 使用 DBeaver 连接 MySQL 数据库的时候, 一直报错下面的错误 Public Key Retrieval is

Caused by: org.hibernate.MappingException: Could not determine type for: org.cgh.ssh.pojo.GoodsType,

MappingException:这个主要是类映射上的异常,Could not determine type for: org.cgh.ssh.pojo.GoodsType,这句话表示GoodsType这个类没有被映射到

vue 父组件调用子组件的方法报错,“TypeError: Cannot read property ‘subDialogRef‘ of undefined“

vue 父组件调用子组件的方法报错,“TypeError: Cannot read property ‘subDialogRef’ of undefined” 最近用vue做的一个界面,引入了一个子组件,在父组件中调用子组件的方法时,报错提示: [Vue warn]: Error in v-on handler: “TypeError: Cannot read property ‘methods

Vue3上传图片报错:Current request is not a multipart request

当你看到错误 "Current request is not a multipart request" 时,这通常意味着你的服务器或后端代码期望接收一个 multipart/form-data 类型的请求,但实际上并没有收到这样的请求。在使用 <el-upload> 组件时,如果你已经设置了 http-request 属性来自定义上传行为,并且遇到了这个错误,可能是因为你在发送请求时没有正确地设置

QT 编译报错:C3861: ‘tr‘ identifier not found

问题: QT 编译报错:C3861: ‘tr’ identifier not found 原因 使用tr的地方所在的类没有继承自 QObject 类 或者在不在某一类中, 解决方案 就直接用类名引用 :QObject::tr( )