找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 740|回复: 9
收起左侧

关于C语言函数返回值的问题

[复制链接]
ID:705806 发表于 2023-6-5 15:50 | 显示全部楼层 |阅读模式
我在查看公司的项目的时候发现有以下代码

#include "system.h"
static uint16_t Motor_Time_Max = 0;

void Set_Motor_Time(uint16_t time)
{
Motor_Time_Max = time;
}
uint16_t Get_Motor_Time(void)
{
uint16_t time = Motor_Time_Max ;
return time;
}

关于Get函数 ,我尝试了直接返回没有任何区别 ,为什么以前的要弄一个新变量来返回呢?
回复

使用道具 举报

ID:752974 发表于 2023-6-5 16:21 | 显示全部楼层
编译器优化的问题,再者还有程序设计者的习惯。
回复

使用道具 举报

ID:883242 发表于 2023-6-5 16:30 | 显示全部楼层
作者可能以前是写C#的,这么写在c语言里面只能增加最终机器码的复杂度,没有任何好处,除非能把这两个函数声明成inline函数。
回复

使用道具 举报

ID:647261 发表于 2023-6-5 16:39 | 显示全部楼层
其实没怎么看明白你的意思
我说一下返回不返回的区别:
Motor_Time_Max是全局变量,调用Set_Motor_Time()时,Motor_Time_Max的值可以被其他函数调用,类似于返回了Motor_Time_Max的值
在Get_Motor_Time(void)中,time是局部变量,不加return time的话,time的值是不能被其他函数调用的。加上return time,Get_Motor_Time()可以当成一个数来用。
比如,你可以写a = Get_Motor_Time() +b;但是不能写a = Set_Motor_Time() +b;要改成a = Motor_Time_Max+b;
回复

使用道具 举报

ID:879348 发表于 2023-6-5 16:49 | 显示全部楼层
我也习惯返回局部变量,不会返回全局变量
回复

使用道具 举报

ID:1045628 发表于 2023-6-5 17:07 | 显示全部楼层
高级语言的书写习惯,各种get、set用的飞起
回复

使用道具 举报

ID:705806 发表于 2023-6-5 17:26 | 显示全部楼层
Hephaestus 发表于 2023-6-5 16:30
作者可能以前是写C#的,这么写在c语言里面只能增加最终机器码的复杂度,没有任何好处,除非能把这两个函数 ...

我们都是纯C的好像不能用inline吧
回复

使用道具 举报

ID:705806 发表于 2023-6-5 17:28 | 显示全部楼层
sttt300 发表于 2023-6-5 16:39
其实没怎么看明白你的意思
我说一下返回不返回的区别:
Motor_Time_Max是全局变量,调用Set_Motor_Time() ...

这是一个类似于lib的东西  我找到的源码就是这样的 然后能看到可以直接直接使用的就只有Get 和Set函数
回复

使用道具 举报

ID:705806 发表于 2023-6-5 17:29 | 显示全部楼层
munuc_w 发表于 2023-6-5 16:21
编译器优化的问题,再者还有程序设计者的习惯。

好的  谢谢!
回复

使用道具 举报

ID:883242 发表于 2023-6-5 17:37 | 显示全部楼层
羽翼之凋零 发表于 2023-6-5 17:26
我们都是纯C的好像不能用inline吧

c语言都支持inline,但是inline并不是c语言标准关键字,所以要查编译器手册看看应该怎么写。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表