搜索
bottom↓
回复: 23

回到原点 ,再论程序的一个结构问题

[复制链接]

出0入26汤圆

发表于 2019-6-29 16:24:06 | 显示全部楼层 |阅读模式
本帖最后由 lonesomely 于 2019-6-29 16:27 编辑

有时函数为了可读性 和可维护性  ,,把一部分过程打包成 子函数,,这样看起来清晰明了

假如函数fun 调用子函数fun1,,      那么fun1的一些变量为了下次运行值还存在 ,那么必须定义成全局变量吗?

如果在子函数定义成静态局部变量,,按步骤执行 0,1,2,3  ,,假如执行到2步骤了,
但此时主函数 fun 想重新让fun1函数从步骤0开始,,那么 static  a =0;只能定义在外面吧 ,


领导说 尽量少用全局变量    ,那样看起来容易 全局变量漫天飞,在这里不定义不行吧   



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出615入1076汤圆

发表于 2019-6-29 16:30:39 来自手机 | 显示全部楼层
我看是從未離開起點。。。把定義移到文件頭,有需要的話包成結構體,要額外改增加單獨函數做為 API,不直接對外的函數和數據必須都加 static 修飾。

出0入26汤圆

 楼主| 发表于 2019-6-29 16:46:30 | 显示全部楼层
dukelec 发表于 2019-6-29 16:30
我看是從未離開起點。。。把定義移到文件頭,有需要的話包成結構體,要額外改增加單獨函數做為 API,不直接 ...

哈哈 谢谢  ,,
全局变量尽量少用,但不是不能用,
必要的时候该用就用
对吧

出0入0汤圆

发表于 2019-6-29 16:50:23 | 显示全部楼层
换个思路,给fun1加一个参数,当参数为非0时,不改变a的值,当参数为0时,则把参数赋值给a.

出0入26汤圆

 楼主| 发表于 2019-6-29 16:53:08 | 显示全部楼层
xjmlfm1 发表于 2019-6-29 16:50
换个思路,给fun1加一个参数,当参数为非0时,不改变a的值,当参数为0时,则把参数赋值给a. ...

这个注意好  ,,谢谢

出0入442汤圆

发表于 2019-6-29 16:53:38 来自手机 | 显示全部楼层
lonesomely 发表于 2019-6-29 16:46
哈哈 谢谢  ,,
全局变量尽量少用,但不是不能用,
必要的时候该用就用

看你的需求。你如果就全局需要一个总标志,那你就弄个全局的。否则如果只针对某个东西有效,那就打个class或struct包起来。这样针对性计算也方便了。

传参时传指针是可以节省不少时间的,但是一定要注意嵌入式最好把结构体弄成全局的,尽量不要直接传结构体或返回结构体!否则编译器会生成一大堆指令去搬数据!

出0入26汤圆

 楼主| 发表于 2019-6-29 16:56:51 | 显示全部楼层
wye11083 发表于 2019-6-29 16:53
看你的需求。你如果就全局需要一个总标志,那你就弄个全局的。否则如果只针对某个东西有效,那就打个clas ...

谢谢坛友的建议

出140入158汤圆

发表于 2019-6-29 17:14:39 | 显示全部楼层
只在函数内才用到的局部变量,再次调用函数之还在的用静态,函数间共用的,用结构体指针,很多函数用到或主循环和中断用到的用全局,中断和主循环都用的,全局+Volatile
碰到很多所谓大公司的傻屌码农,说开编译器优化程序就不正常,不敢开优化,结果一看他程序,一堆没有Volatile的全局,沙雕

出0入0汤圆

发表于 2019-6-29 17:18:05 来自手机 | 显示全部楼层
做一个参数初始化函数

出10入0汤圆

发表于 2019-6-29 17:26:32 | 显示全部楼层
有时候要看是怎么干。有时为了交差,随便弄了就过了。

出0入8汤圆

发表于 2019-6-29 17:31:39 | 显示全部楼层
lonesomely 发表于 2019-6-29 16:46
哈哈 谢谢  ,,
全局变量尽量少用,但不是不能用,
必要的时候该用就用

哈哈,楼主,感觉这不是回到原点,就是在原点踏步。你老实说,写多久程序了,有20万行没。。。老司机都不纠结这的。


你领导说的很清楚了,只是让少用,没说不让用,该用还是得用,不然编译器为啥要支持全局变量。。。


二楼说的很好,比如打包成结构体,看看Qt的程序,C++,面向对象的处理




出615入1076汤圆

发表于 2019-6-29 17:49:45 来自手机 | 显示全部楼层
C 語言要多看看 linux 內核代碼,看 QT 沒用。

出0入22汤圆

发表于 2019-6-29 17:51:28 来自手机 | 显示全部楼层
为啥不用指针传递进去呢?那样函数里面可以改数据,函数外面则可以改。

出0入8汤圆

发表于 2019-6-29 17:54:56 | 显示全部楼层
建议楼主换下思路,fun1内不要定义静态变量,需要的参数作为一个机构体指针传入。
主函数里面定义结构体对象,保留参数和结果,相应情况下修改相应的结构体对象参数,再调用fun1,参数的生命周期有主函数控制。

出0入26汤圆

 楼主| 发表于 2019-6-29 18:25:00 来自手机 | 显示全部楼层
amigenius 发表于 2019-6-29 17:14
只在函数内才用到的局部变量,再次调用函数之还在的用静态,函数间共用的,用结构体指针,很多函数用到或主 ...

说的有道理

出0入26汤圆

 楼主| 发表于 2019-6-29 18:25:32 来自手机 | 显示全部楼层
nic_911 发表于 2019-6-29 17:54
建议楼主换下思路,fun1内不要定义静态变量,需要的参数作为一个机构体指针传入。
主函数里面定义结构体对 ...

谢谢坛友的意见

出0入26汤圆

 楼主| 发表于 2019-6-29 18:27:20 来自手机 | 显示全部楼层
Jmhh247 发表于 2019-6-29 17:31
哈哈,楼主,感觉这不是回到原点,就是在原点踏步。你老实说,写多久程序了,有20万行没。。。老司机都不 ...

……20万的代码还真没写过,,哈哈

出1310入193汤圆

发表于 2019-6-29 21:06:11 | 显示全部楼层
amigenius 发表于 2019-6-29 17:14
只在函数内才用到的局部变量,再次调用函数之还在的用静态,函数间共用的,用结构体指针,很多函数用到或主 ...

精辟,多年来的经验之谈。

出0入0汤圆

发表于 2019-6-30 08:59:20 | 显示全部楼层
只在函数内才用到的局部变量,再次调用函数之还在的用静态;
函数间共用的,用结构体指针;
很多函数用到或主循环和中断用到的用全局,中断和主循环都用的,全局+Volatile

出0入0汤圆

发表于 2019-6-30 09:04:10 | 显示全部楼层
先要搞清楚你这个变量的生命周期,然后作用域。   你可以把变量们用结构体定义 然后在func里面定义,通过指针参数传递给func1 这样 func 和 func1 都可以修改了

出0入0汤圆

发表于 2019-6-30 10:50:33 | 显示全部楼层

尽量少用全局变量是对的,因为明确有好的解决方案

可以尝试get_xxx和set_xxx函数,面向接口开发

出0入26汤圆

 楼主| 发表于 2019-6-30 11:20:58 | 显示全部楼层
浮华一生 发表于 2019-6-30 09:04
先要搞清楚你这个变量的生命周期,然后作用域。   你可以把变量们用结构体定义 然后在func里面定义,通过指 ...

谢谢你的意见

出0入26汤圆

 楼主| 发表于 2019-6-30 11:21:22 | 显示全部楼层
Hulk 发表于 2019-6-30 10:50
尽量少用全局变量是对的,因为明确有好的解决方案

可以尝试get_xxx和set_xxx函数,面向接口开发 ...

是的 ,,这样更清晰一些

出0入0汤圆

发表于 2019-6-30 15:06:10 | 显示全部楼层
dukelec 发表于 2019-6-29 16:30
我看是從未離開起點。。。把定義移到文件頭,有需要的話包成結構體,要額外改增加單獨函數做為 API,不直接 ...

行家。。。。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 08:06

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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