OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3699|回复: 3

对于一个有输入变量的函数不给其设置输入变量,而是直接用变量可以吗?

[复制链接]

14

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
105
金钱
105
注册时间
2013-10-19
在线时间
1 小时
发表于 2014-12-2 14:25:15 | 显示全部楼层 |阅读模式
5金钱
突然有这么一个想法想请教大家,RT,举个例子,比如我的delay函数正常来写的话如下:
void delay(u8 temp)             //第一种方式:这里有输入变量
{
    for(a=50;a>0;a--)
        for(b=temp;b>0;b--);
}
但是如果我的temp代表特定的一个函数中变量的值,那么我把它写成下面的形式
void delay(void)                   //第二种方式:只是这里发生了变化
{
    for(a=50;a>0;a--)
        for(b=temp;b>0;b--);
}
大家说这样可以吗?我的程序有类似的利用方法,在按键中断中,每个按键代表不同的值,我把获取键值后处理的函数设置也成第二种方式,
比如应该是Get_KeyData(u8 value),里边是Switch键值的判断并执行相应的操作,我把它直接写成Get_KeyData(void),然后再Switch一样的过程,经过多次实际测试,是可以正确实现效果的,但是我不知道类似于这样的函数用法是不是合理呢?大家有什么好的看法和观点,能否相互讨论一下?

最佳答案

查看完整内容[请看2#楼]

具体代码具体分析,第一种方式的形参传递,调用函数时会把形参压栈,直至函数调用完毕后释放,也就是第一种形式的temp在内存中的生命周期为函数被调用的周期,第二种方式,temp属于全局变量,这种方式慎用,因为temp被分配内存后会一直存在,也就是你可能会在某一个时间某一个地方会对temp作出了修改,这样可能导致不能预料的后果
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

19

主题

702

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3339
金钱
3339
注册时间
2013-7-30
在线时间
708 小时
发表于 2014-12-2 14:25:16 | 显示全部楼层
具体代码具体分析,第一种方式的形参传递,调用函数时会把形参压栈,直至函数调用完毕后释放,也就是第一种形式的temp在内存中的生命周期为函数被调用的周期,第二种方式,temp属于全局变量,这种方式慎用,因为temp被分配内存后会一直存在,也就是你可能会在某一个时间某一个地方会对temp作出了修改,这样可能导致不能预料的后果
思想很重要,无论做人还是编程!
我的技术公众号【微联智控工作室】
回复

使用道具 举报

7

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2014-11-24
在线时间
3 小时
发表于 2014-12-2 15:49:21 | 显示全部楼层
第一,你的temp必须是全局变量。第二,你用switch的时候,Get_KeyData(void)函数有返回值。
回复

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2014-12-2
在线时间
0 小时
发表于 2014-12-2 20:38:50 | 显示全部楼层
其实你还可以进一步改进,switch一般都是fsm,可以函数指针数组替代,数组下标就是那个全局变量
不过全局变量还是小心,建议写好代码看一眼汇编,必要加上volatile
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-28 09:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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