打印
[STM32F1]

为什么要通过临时变量间接赋值?有何用意?

[复制链接]
994|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
maxwellfairy|  楼主 | 2020-5-8 18:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 maxwellfairy 于 2020-5-9 09:22 编辑

有一个全局变量:float general_f;
在一个函数中要把general_f的值赋给另一个全局变量:float general_other;
void give_value(void)
{
    float temp;
    temp = general_f;
    general_other = temp;
}
为什么要通过临时变量间接赋值?有何用意?
直接general_other = general_f;不好吗?
求各位大神解惑。。。。。。。。。。。

再补充一点:程序是别人写的,他很多函数里面都是这样处理的;
函数一进来就先把全局变量的值赋给临时变量,后面所有
赋值语句中,都用temp来赋值,不再使用全局变量,感觉像是在
保护这个全局变量一样,害怕后面再使用会改变其值。

PS:程序烧写到STM32F103芯片



使用特权

评论回复
沙发
lihuasoft| | 2020-5-8 21:57 | 只看该作者
或许这句代码本来还有其他运算,后来改成了简单的赋值,懒得把局部变量temp去掉

使用特权

评论回复
板凳
maxwellfairy|  楼主 | 2020-5-9 09:10 | 只看该作者
lihuasoft 发表于 2020-5-8 21:57
或许这句代码本来还有其他运算,后来改成了简单的赋值,懒得把局部变量temp去掉 ...

程序是别人写的,他很多函数里面都是这样处理的,
所以排除懒得去掉temp这种情况。

使用特权

评论回复
地板
john_lee| | 2020-5-9 09:18 | 只看该作者
maxwellfairy 发表于 2020-5-9 09:10
程序是别人写的,他很多函数里面都是这样处理的,
所以排除懒得去掉temp这种情况。
...

很多吗?那猜一下,嗯......你们公司的绩效是按代码行数来算的吗?

使用特权

评论回复
5
maxwellfairy|  楼主 | 2020-5-9 09:20 | 只看该作者
john_lee 发表于 2020-5-9 09:18
很多吗?那猜一下,嗯......你们公司的绩效是按代码行数来算的吗? ...

这倒不是,绩效按老板心情来的。。。。。。

使用特权

评论回复
6
zchong| | 2020-5-9 11:07 | 只看该作者
有时候是有必要的,比如某个全局变量在这个函数中多次用到(这个变量不一定要最新的值,但在该函数内要求每次使用的时候值不能改变),但是这个全局变量有可能在这个函数执行过程中被改变(比如发生某个中断,中断函数中会改变这个全局变量),于是在进入函数的时候就复制一份该全局变量的副本。

使用特权

评论回复
评论
maxwellfairy 2020-5-9 15:07 回复TA
对,应该是出于这种考虑, 所以他为了防止在执行函数过程中全局变量值改变, 索性所有函数中都用全局变量的副本,懒得去判断这个 全局变量是否会被改变。 
7
八层楼| | 2020-6-6 16:22 | 只看该作者
有可能有其他需求

使用特权

评论回复
8
观海| | 2020-6-6 16:23 | 只看该作者
只看这一小段可看不出来

使用特权

评论回复
9
观海| | 2020-6-6 16:23 | 只看该作者
只看这一小段可看不出来

使用特权

评论回复
10
guanjiaer| | 2020-6-6 16:24 | 只看该作者
是不是还有后续运算

使用特权

评论回复
11
heimaojingzhang| | 2020-6-6 16:24 | 只看该作者
这么看看不好  可以有很多的用意

使用特权

评论回复
12
keaibukelian| | 2020-6-6 16:24 | 只看该作者
全文档查找一下 看看有别的地方用吗

使用特权

评论回复
13
ipman| | 2020-6-6 18:08 | 只看该作者
不明白你的情况,在PC上,出于安全考虑,如果关键的验证代码,为了防止反编译,是有这个可能,可以增加反汇编难度。

使用特权

评论回复
14
kingkits| | 2020-6-7 10:35 | 只看该作者
有时候在排查缺陷时,必须要确认这个变量的赋值情况,程序里如果仅仅使用直接赋值(直接general_other = general_f;),那么可能会有很多的位置,如果改用这个函数,那么只需要在函数里设置断点就可以监视所有的赋值操作了,至于使用temp变量,可能是防止编译系统的优化处理。也可能有其他的需求,比如对需要按比例改变赋值内容(*1.x)之类的操作

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

8

帖子

0

粉丝