首页 > 其他分享 >C 语言中,如果函数声明了返回类型,但执行路径中没有 return 语句,则返回什么数据值呢?

C 语言中,如果函数声明了返回类型,但执行路径中没有 return 语句,则返回什么数据值呢?

时间:2024-10-23 16:34:07浏览次数:5  
标签:返回 语句 Cnt return u8 PID 100 JSVal

u8 PID_Ctrl(float setVal,float CurVal)
{
	static unsigned int Cnt = 0;
	static u8 JSVal = 0;
	if(++Cnt >= 100)
	{
		Cnt = 0;
		JSVal = (u8)PID_SF(setVal,CurVal);
		return JSVal;
	}
}

//主函数中存在:
PWM_ZB_Val = PID_Ctrl(60, JRL_Real_Temp);	

Q:当Cnt<100时,PWM_ZB_Val 等于多少呢?

A:

在修改后的代码中,如果 Cnt 小于 100,函数 PID_Ctrl 将不会执行 return JSVal; 这一行。这意味着当 Cnt 小于 100 时,函数不会返回任何值。然而,由于函数签名指定了返回类型为 u8(一个无符号的 8 位整数),函数必须返回一个 u8 类型的值。

在 C 语言中,如果函数声明了返回类型,但执行路径中没有 return 语句,那么函数的行为是未定义的。这意味着如果 Cnt 小于 100,PID_Ctrl 函数将返回一些垃圾值,这个值可能是内存中该位置原有的任何值。

所以,当 Cnt 小于 100 时,PWM_ZB_Val 将被赋予一个未定义的值,这个值是不确定的,并且没有意义。在编写代码时,应该确保所有可能的执行路径都有明确的 return 语句,以避免这种未定义行为。

 

所以return JSVal;放在if里边,会返回垃圾值,我们应该放在外面,又因为JSVal是静态的,所以当cnt<100的时候,会返回上一次的JSval值:

u8 PID_Ctrl(float setVal,float CurVal)
{
	static unsigned int Cnt = 0;
	static u8 JSVal = 0;
	if(++Cnt >= 100)
	{
		Cnt = 0;
		JSVal = (u8)PID_SF(setVal,CurVal);
	}
	return JSVal;	//Cnt<100时,返回上一次JSVal值
}

 

标签:返回,语句,Cnt,return,u8,PID,100,JSVal
From: https://www.cnblogs.com/YYZYCS/p/18497706

相关文章

  • 两个时间段比较的六种情况,以及交集、并集、补集简要sql语句示例
    〇、两时间段比较的全部情况总共有如下图中的六种情况:下文将根据这六种情况进一步操作。注意,图中说的动态和固定两时间段,就是两个普通时间段,不区分主次,仅用作帮助理解。一、判断两个时间段是否有交叉(交集)正常情况下,就是图中的2、3、4、5四种有交叉的情况。如果直接通过这......
  • 在SQL Server中,可以使用查询结果生成SQL语句,通常通过动态SQL来实现。以下是一些常见的
    ai查到的,用着可以的,记录下示例场景假设有一个名为Employees的表,包含EmployeeID、FirstName和LastName字段。我们想要根据查询结果生成一系列的INSERT语句。1.使用FORXMLPATH生成INSERT语句SELECT'INSERTINTOEmployees(EmployeeID,FirstName,LastName)VALUES(......
  • 快手根据ID取商品详情 API 返回值说明
    快手根据ID取商品详情API返回值说明item_get-根据ID取商品详情 ks.item_get公共参数请求地址:名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_nameString是API接口名称(包括在请求地址中)[item_search,item_get,item_search_sho......
  • ReactOS寻找病返回最小StartingAddress所在结点。
    ReactOS寻找病返回最小StartingAddress所在结点。MmIterateFirstNode()函数文章目录ReactOS寻找病返回最小StartingAddress所在结点。MmIterateFirstNodeMmIterateFirstNode/*INCLUDES*****************************************************************/#incl......
  • actix-web连接mysql并返回json
    toml[dependencies]actix-web="4"mysql="25.0.0"chrono="0.4"serde={version="1.0",features=["derive"]}rsuseactix_web::{get,post,web,App,HttpServer,Responder,HttpResponse,Error};......
  • objectarx中,块引用bounds返回的结果跟预期不一致的解决方法
    最近在写一个根据图框批量导出图框内容的arx插件,但是在确定图框的范围的时候,返现使用bounds函数返回的结果比真实的范围要大,最小点相同,但是最大点要更大一些,点击图框,发现很远处还有一个蓝点,但是炸开之后蓝点就不见了,然后依次选择炸开的元素,发现是有些文字太长,因此,解决办法就是忽略......
  • 编写HiveQL语句实现WordCount算法
    确保启动hadooop和hive  创建测试文件echo"helloworld">file1.txtecho"hellohadoop">file2.txt#创建HDFS上的/input目录hdfsdfs-mkdir-p/input#将本地文件上传到HDFShdfsdfs-putfile1.txt/input/hdfsdfs-putfile2.txt/input/打开Hiveshell......
  • 数据库系统-06-SQL查询语句4
    一、AggregateFunctions(聚集函数)1.定义:聚合函数接受一组(集合或多重集合)值作为输入,并返回单个值。2.种类函数功能count统计数量max最大值min最小值avg平均值sum求和二、基本的聚合1.语法:select 聚合函数(字段列表)from 表名;例1:找出计算......
  • 数据库系统-07-SQL查询语句5-嵌套子查询
    一、嵌套子查询1.概念:子查询是嵌套在另一个查询中的select-from-where表达式。子查询通常被用来对集合成员资格、集合的比较以及集合的基数进行检查2.集合的成员资格(1)概念:SQL允许测试元组在关系中的成员资格。连接词in测试元组是否是集合中的成员,集合是由select子句产生的......
  • SpringBoot使用默认的日志logback(2)—自定义配置+控制台输出sql语句
    原文链接:SpringBoot使用默认的日志logback(2)—自定义配置+控制台输出sql语句–每天进步一点点上一篇文章中简单介绍了springboot通过系统配置的方式配置日志:SpringBoot使用默认的日志logback(1)—系统配置这篇文章简单介绍一下日志的自定义配置。1.自定义配置springboot......