搜索
bottom↓
回复: 34

一个全局变量很多的程序,如何理清逻辑关系

[复制链接]

出0入0汤圆

发表于 2018-1-2 14:31:13 | 显示全部楼层 |阅读模式
程序是我从原来产品移植过来的,中间经过很多人的手,现在又回到我手上,前些天发现一个严重问题,更改方法也想好了,只是觉得程序太乱了,由于已经量产,也不好重构,只想把它整理清楚,防止后期再有问题。

由于全局变量比较多,画流程图后,还是没办法看出来是否还有问题。请问各位都如何处理此类问题的?

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

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入57汤圆

发表于 2018-1-2 14:41:04 | 显示全部楼层

接过别人的球,会有一大群人追着你往前跑的,别管你懂不懂这是什么球。

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2018-1-2 15:07:30 | 显示全部楼层
加你要的功能就好了,一般不会要你去理 或是优化程序 , 就为了 可读性或是可移植性

出0入4汤圆

发表于 2018-1-2 15:27:18 | 显示全部楼层
上操作系统

出0入0汤圆

发表于 2018-1-2 17:35:32 | 显示全部楼层
血的教训,N多人改过的程序,要不就重构,要不就别动,然后想一个不动其它任何程序的方法。
曾经拿到一个至少5年以上的程序,因为不好看就顺手加了下{},结果短路锁死变打嗝,查了半天发现少了一个},真的是就少了一个,程序还编译通过了。。。

出0入4汤圆

发表于 2018-1-2 17:38:03 | 显示全部楼层
liansh2002 发表于 2018-1-2 17:35
血的教训,N多人改过的程序,要不就重构,要不就别动,然后想一个不动其它任何程序的方法。
曾经拿到一个至 ...

求少了一个}能编译通过的方法

出0入0汤圆

发表于 2018-1-2 18:32:23 | 显示全部楼层
liansh2002 发表于 2018-1-2 17:35
血的教训,N多人改过的程序,要不就重构,要不就别动,然后想一个不动其它任何程序的方法。
曾经拿到一个至 ...

同求这样的方法。

出0入0汤圆

发表于 2018-1-3 00:49:36 来自手机 | 显示全部楼层
liansh2002 发表于 2018-1-2 17:35
血的教训,N多人改过的程序,要不就重构,要不就别动,然后想一个不动其它任何程序的方法。
曾经拿到一个至 ...

这编译器还能这样工作?

出0入0汤圆

发表于 2018-1-3 07:46:36 来自手机 | 显示全部楼层
liansh2002 发表于 2018-1-2 17:35
血的教训,N多人改过的程序,要不就重构,要不就别动,然后想一个不动其它任何程序的方法。
曾经拿到一个至 ...

同求少括号还能编译过的方法

出0入31汤圆

发表于 2018-1-3 07:51:05 来自手机 | 显示全部楼层
应该不是少了,是括错内容了吧

出0入0汤圆

发表于 2018-1-3 08:49:03 | 显示全部楼层
我的建议是不要动以前的, N多人改过的代码,肯定有很多特殊的应用场景,或者为了修复某种深层次的bug,这种东西可能很难复现。要加功能就找到对应点修改就可以了。要换平台的话就把接口抽出来,整理一下即可,千万别去重写。

出0入0汤圆

发表于 2018-1-3 08:54:00 | 显示全部楼层
2楼不仅及格,而且相当优秀!

出0入0汤圆

发表于 2018-1-3 08:55:04 来自手机 | 显示全部楼层
我想象的那种接手会很难理清,除非上几家都有挺好的风格和清晰的代码。大部分时候只能依靠说明书和使用时所知道的逻辑,针对性打补丁。

出0入0汤圆

发表于 2018-1-3 09:45:40 | 显示全部楼层
zchong 发表于 2018-1-3 07:51
应该不是少了,是括错内容了吧

哈哈哈,你这么一说还真有可能,编译器检查括号是最基本的功能了,这么低级的问题基本都是人为原因了

出0入0汤圆

发表于 2018-1-3 12:00:59 | 显示全部楼层
liansh2002 发表于 2018-1-2 17:35
血的教训,N多人改过的程序,要不就重构,要不就别动,然后想一个不动其它任何程序的方法。
曾经拿到一个至 ...

求少了一个}能编译通过的方法

出0入0汤圆

发表于 2018-1-3 14:14:32 | 显示全部楼层
二楼完美解决问题,哈哈

出0入0汤圆

 楼主| 发表于 2018-1-3 14:54:33 | 显示全部楼层
ljc 发表于 2018-1-3 14:14
二楼完美解决问题,哈哈

没有按2楼的做,毕竟原来是我的项目,昨天改了变量命名规则,挪动了部分代码,今天又画了逻辑框图,跟FPGA的RTL图一样,不过对VISIO使用熟悉有限,所以画的比较简单。现在越来越清晰了点

出0入0汤圆

发表于 2018-1-3 19:51:11 来自手机 | 显示全部楼层
qingyin2009 发表于 2018-1-3 14:54
没有按2楼的做,毕竟原来是我的项目,昨天改了变量命名规则,挪动了部分代码,今天又画了逻辑框图,跟FPG ...

用si之类改动全局变量名字好理解 结构就没精力去改动了 只能用到什么加什么

出0入4汤圆

发表于 2018-1-3 20:36:12 | 显示全部楼层
最好能不改就不改了,否则新的软件出了深层次的问题,旧的就没有,这就麻烦了

出0入0汤圆

发表于 2018-1-5 11:09:41 | 显示全部楼层
MAD_FISH 发表于 2018-1-2 17:38
求少了一个}能编译通过的方法

char *str = "{";

出0入0汤圆

发表于 2018-1-5 11:52:18 | 显示全部楼层
有个工具叫Understand,兴许有用

出0入0汤圆

 楼主| 发表于 2018-1-5 12:36:30 | 显示全部楼层
styleno1 发表于 2018-1-5 11:52
有个工具叫Understand,兴许有用

o(∩_∩)o 哈哈,用了很久了,它生成的图有的时候比较好,帮助有限

出0入4汤圆

发表于 2018-1-6 18:42:16 | 显示全部楼层

你这条语句是完整的,不要骗我

出0入0汤圆

发表于 2018-1-6 19:01:33 | 显示全部楼层
liansh2002 发表于 2018-1-2 17:35
血的教训,N多人改过的程序,要不就重构,要不就别动,然后想一个不动其它任何程序的方法。
曾经拿到一个至 ...

我感觉这个编译器很好,求链接

出0入0汤圆

发表于 2018-1-7 21:38:18 | 显示全部楼层
楼主相关一类的变量可以用结构体封装到一起来处理     

出0入0汤圆

发表于 2018-1-8 15:35:55 | 显示全部楼层
最好不要大动,添加你要的功能就好。大动还不如重写呢。

出0入0汤圆

发表于 2018-1-8 17:12:24 | 显示全部楼层
经过很多人的手的程序,乱就让他乱吧,感觉现在重构很可能会出一堆莫名其妙的问题,而且重新测试也需要很长时间

出0入0汤圆

发表于 2018-1-16 14:43:10 | 显示全部楼层
我一般都重写,这种程序基本没救

出0入0汤圆

发表于 2018-1-16 15:46:44 来自手机 | 显示全部楼层
本帖最后由 fnems 于 2018-1-16 15:50 编辑

1 把所有全局变量封装到一个全局结构体里面,然后删除所有全局变量。
2 建立全局结构体变量的赋值和读取函数,区分原程序的全局变量读写。
3 编译时缺少了删掉的全局变量会报错。把报错的语句改成第2步里面建立的读写函数。
4 改进读写函数,增加来源源码文件和来源源码行号参数。调用时传入__FILE__和__LINE__。函数里打印源码调用信息。

5 运行上述修改的程序。这时候会按照预期依次打印出哪个C源文件的哪一行修改/读取了哪个全局变量。

出0入0汤圆

 楼主| 发表于 2018-4-10 22:49:25 来自手机 | 显示全部楼层
fnems 发表于 2018-1-16 15:46
1 把所有全局变量封装到一个全局结构体里面,然后删除所有全局变量。
2 建立全局结构体变量的赋值和读取函 ...

受教了,试试去

出0入0汤圆

发表于 2018-4-11 20:37:13 | 显示全部楼层
这种代码一般不敢乱动!

出0入0汤圆

发表于 2018-4-11 23:39:18 | 显示全部楼层
fnems 发表于 2018-1-16 15:46
1 把所有全局变量封装到一个全局结构体里面,然后删除所有全局变量。
2 建立全局结构体变量的赋值和读取函 ...

还不如重构呢

出0入0汤圆

发表于 2018-4-12 00:05:55 | 显示全部楼层
fnems 发表于 2018-1-16 15:46
1 把所有全局变量封装到一个全局结构体里面,然后删除所有全局变量。
2 建立全局结构体变量的赋值和读取函 ...

这是一个方法,我也按照这种方式处理一个三年前的老程序。

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-7-6 22:29

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

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