吐血啊前两天接到的一个程序.该如何处理
吐血啊,前两天接到的一个程序.
其中有两个cpp文件,一个68000多行,一个57000多行.其中有一个函数,代码有30785行....Cbuilder6.0打开后鼠标都不敢随便动,否则动一次卡住5~7秒.尼玛呦,这是哪位大神写的啊,小弟五体投地啊.
------解决方案--------------------
天啊,还没看过这么大的cpp文件!
------解决方案--------------------
你有没有见过一个form上面有N个panel
panel上有很多个控件
修改代码找个button都要找半天
还有40多个StringList 定义的名字叫 StringList *aa bb cc dd ee .....
------解决方案--------------------
这。。。也是一种风格
------解决方案--------------------
------解决方案--------------------
嗯,那就动手改改吧
------解决方案--------------------
被震得不敢吭声,求楼主程序搞定后发个感想。
------解决方案--------------------
这个可以啊,你在对象查看器里找到那个名字(都是按字母顺序排列的嘛),然后再看Form,那个组件就处于高亮状态,这样就好看了呀
------解决方案--------------------
呵呵,这玩意机器配置低了也影响效果.
------解决方案--------------------
这。。换电脑吧
------解决方案--------------------
这种编写风格就是有病,难维护,百害而无一益
------解决方案--------------------
虽然不会c++但是一个函数三万多行真的是很吓人啊
------解决方案--------------------
牛b的函数
------解决方案--------------------
------解决方案--------------------
这简直就是极品中的战斗机轰炸机啊~
------解决方案--------------------
功能被不斷地增加,需要被不停地更改,代碼需要不斷地完善。
在經歷修改代碼的痛苦后,才會明白“舉重若輕”的感覺是多麼美妙!
面向對象編程與小時候看的數學歸納法的解題思路挺象的:
1、總結:總結需求,將代碼需要實現的功能寫出來,這步很重要,因為缺少這步,后來的人不知道你這些代碼總共要實現哪些需求,不是大牛不下決心的話,不敢重新實現。只好選擇在上面修修改改,導致代碼越來越長。
2、歸納:將重複的代碼,重複的需求歸納為一個個函數或類
3、猜想:在頭腦中出現一個類體系(數學模型),通過這些類的組合與繼承,能解決需求中的問題。各個類間如何的組合,如何繼承,如何通訊,則能解決現實中的哪類問題。
4、證明:將能在這個類體系中,能解決的問題的集合列出,也將現實需要中需要解決的問題列出,兩者重合度很高的話,表示你設計的這個類體系是可以解決問題的。也對以后可能出現的問題做到心中有數。這是遇到問題可以做到“舉重若輕”的基礎。
寫代碼,數學多了一個最終實現,數學只要證明就完了,而寫代碼還要將這變成現實。
而這就是要考慮類的接口,是否好用。即功能可以實現了,接口又簡單易用,那麼你的這個類體系設計就是成功的了。有好的設計,才有好的代碼。叫學程序設計,就要有設計者的心胸,要不然學不好。
別為大神歡呼,踏踏實實站在地板上做好設計,我們的程序是為普通人而做,我們不是為成神而努力寫出只有神才看得懂的代碼。
------解决方案--------------------
呵呵,我自己写的程序,最后的工作就是加代码说明和简化代码,通常比最初写时至少能减少三分之一行!
主要是为了以后自己维护和查看
------解决方案--------------------
牛a与牛c之间。
个人对于超过1000行的单个源码文件看着都晕
------解决方案--------------------
是不是日本外包的软件?
我们公司就有过很多3万行以上的函数,结果是因为狗日写的设计象写文章一样,一气呵成。
如果切割成不同的函数,反而变成了违反狗日的设计了,所以谁看到都是是无奈呀。
------解决方案--------------------
------解决方案--------------------
自己编的软件里面也有你遇到的情况,上部分代码你看了,就明白如何搞了。
其中有两个cpp文件,一个68000多行,一个57000多行.其中有一个函数,代码有30785行....Cbuilder6.0打开后鼠标都不敢随便动,否则动一次卡住5~7秒.尼玛呦,这是哪位大神写的啊,小弟五体投地啊.
------解决方案--------------------
天啊,还没看过这么大的cpp文件!
------解决方案--------------------
你有没有见过一个form上面有N个panel
panel上有很多个控件
修改代码找个button都要找半天
还有40多个StringList 定义的名字叫 StringList *aa bb cc dd ee .....
------解决方案--------------------
这。。。也是一种风格
------解决方案--------------------
------解决方案--------------------
嗯,那就动手改改吧
------解决方案--------------------
被震得不敢吭声,求楼主程序搞定后发个感想。
------解决方案--------------------
这个可以啊,你在对象查看器里找到那个名字(都是按字母顺序排列的嘛),然后再看Form,那个组件就处于高亮状态,这样就好看了呀
------解决方案--------------------
呵呵,这玩意机器配置低了也影响效果.
------解决方案--------------------
这。。换电脑吧
------解决方案--------------------
这种编写风格就是有病,难维护,百害而无一益
------解决方案--------------------
虽然不会c++但是一个函数三万多行真的是很吓人啊
------解决方案--------------------
牛b的函数
------解决方案--------------------
------解决方案--------------------
这简直就是极品中的战斗机轰炸机啊~
------解决方案--------------------
功能被不斷地增加,需要被不停地更改,代碼需要不斷地完善。
在經歷修改代碼的痛苦后,才會明白“舉重若輕”的感覺是多麼美妙!
面向對象編程與小時候看的數學歸納法的解題思路挺象的:
1、總結:總結需求,將代碼需要實現的功能寫出來,這步很重要,因為缺少這步,后來的人不知道你這些代碼總共要實現哪些需求,不是大牛不下決心的話,不敢重新實現。只好選擇在上面修修改改,導致代碼越來越長。
2、歸納:將重複的代碼,重複的需求歸納為一個個函數或類
3、猜想:在頭腦中出現一個類體系(數學模型),通過這些類的組合與繼承,能解決需求中的問題。各個類間如何的組合,如何繼承,如何通訊,則能解決現實中的哪類問題。
4、證明:將能在這個類體系中,能解決的問題的集合列出,也將現實需要中需要解決的問題列出,兩者重合度很高的話,表示你設計的這個類體系是可以解決問題的。也對以后可能出現的問題做到心中有數。這是遇到問題可以做到“舉重若輕”的基礎。
寫代碼,數學多了一個最終實現,數學只要證明就完了,而寫代碼還要將這變成現實。
而這就是要考慮類的接口,是否好用。即功能可以實現了,接口又簡單易用,那麼你的這個類體系設計就是成功的了。有好的設計,才有好的代碼。叫學程序設計,就要有設計者的心胸,要不然學不好。
別為大神歡呼,踏踏實實站在地板上做好設計,我們的程序是為普通人而做,我們不是為成神而努力寫出只有神才看得懂的代碼。
------解决方案--------------------
呵呵,我自己写的程序,最后的工作就是加代码说明和简化代码,通常比最初写时至少能减少三分之一行!
主要是为了以后自己维护和查看
------解决方案--------------------
牛a与牛c之间。
个人对于超过1000行的单个源码文件看着都晕
------解决方案--------------------
是不是日本外包的软件?
我们公司就有过很多3万行以上的函数,结果是因为狗日写的设计象写文章一样,一气呵成。
如果切割成不同的函数,反而变成了违反狗日的设计了,所以谁看到都是是无奈呀。
------解决方案--------------------
------解决方案--------------------
自己编的软件里面也有你遇到的情况,上部分代码你看了,就明白如何搞了。
- C/C++ code
// .h void readParse(QXmlStreamReader *xml); // 读取文本阅读器V3.0.0的书签 void readParseV3_0_0(QXmlStreamReader *xml); // 读取文本阅读器V1.0.0 - V2.3.0的书签 void readParseV1_0_0(QXmlStreamReader *xml); // .cpp void TBookmarkConfig::readParse(QXmlStreamReader *xml) { xml->readNextStartElement(); // root node m_item.clear(); // 读取文本阅读器V1.0.0 - V2.3.0的书签 if (xml->name() == "Root") readParseV1_0_0(xml); // 读取文本阅读器V3.0.0的书签 else if ((xml->name() == its::name) && (xml->attributes().value("version") == "1")) readParseV3_0_0(xml); }