标题: 关于C语言函数返回值的问题 [打印本页]

作者: 羽翼之凋零    时间: 2023-6-5 15:50
标题: 关于C语言函数返回值的问题
我在查看公司的项目的时候发现有以下代码

#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函数 ,我尝试了直接返回没有任何区别 ,为什么以前的要弄一个新变量来返回呢?

作者: munuc_w    时间: 2023-6-5 16:21
编译器优化的问题,再者还有程序设计者的习惯。
作者: Hephaestus    时间: 2023-6-5 16:30
作者可能以前是写C#的,这么写在c语言里面只能增加最终机器码的复杂度,没有任何好处,除非能把这两个函数声明成inline函数。
作者: sttt300    时间: 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;
作者: wufa1986    时间: 2023-6-5 16:49
我也习惯返回局部变量,不会返回全局变量
作者: rctty    时间: 2023-6-5 17:07
高级语言的书写习惯,各种get、set用的飞起
作者: 羽翼之凋零    时间: 2023-6-5 17:26
Hephaestus 发表于 2023-6-5 16:30
作者可能以前是写C#的,这么写在c语言里面只能增加最终机器码的复杂度,没有任何好处,除非能把这两个函数 ...

我们都是纯C的好像不能用inline吧
作者: 羽翼之凋零    时间: 2023-6-5 17:28
sttt300 发表于 2023-6-5 16:39
其实没怎么看明白你的意思
我说一下返回不返回的区别:
Motor_Time_Max是全局变量,调用Set_Motor_Time() ...

这是一个类似于lib的东西  我找到的源码就是这样的 然后能看到可以直接直接使用的就只有Get 和Set函数
作者: 羽翼之凋零    时间: 2023-6-5 17:29
munuc_w 发表于 2023-6-5 16:21
编译器优化的问题,再者还有程序设计者的习惯。

好的  谢谢!
作者: Hephaestus    时间: 2023-6-5 17:37
羽翼之凋零 发表于 2023-6-5 17:26
我们都是纯C的好像不能用inline吧

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




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1