C++编程过程中,有哪些常犯的坏习惯,哪怕对于多年经验的

2017-11-17 08:48:13

说说我见到的一些不良现象吧。有些程序员干了十多年还这样。

1.不用namespace。
导致全局空间被污染。或组织混乱带来维护障碍。或使用不便。

2.不使用接口隔离实现/头文件设计不当。
文件间依赖过度紧密难于分离。或过于松散造成使用困难。以及包含次序耦合带来的编译问题。

3.不使用预编译头。
要么不用造成编译慢;
要么在预编译头“隐藏”了一些定义,使库外部无法使用。

4.拒绝使用c++11及高新的语言特性。
即使编译器支持也不用auto,不用lambda表达式,不用override。

5.对c/c++盲目推崇。
比如用性能问题贬低他们其实并不了解的C#和Java;
比如认为所有有GC的语言都是解释执行的。
直到被piapia打脸。

6.不会或不爱使用性能分析手段。
很多人你跟他谈结构不好,他开口闭口说为了性能。然后你一问具体数据就不吭声了。变成了:我觉得一定会更快……

7.滥用内嵌汇编迷信asm的效率和逼格。
常常只是把简单问题复杂化,复杂问题天书化。

8.不写或滥用防御代码。
或不检查指针有效性。由函数依赖传入参数决定是否崩溃。
或用assert代替,崩溃后连日志输出都没有。发布后出了问题就抓瞎。
或有检查,但失败后保持沉默,把问题隐患扩散到其他地方。

9.不用或滥用exception。
或完全不用导致某些逻辑复杂。
或混淆c++异常与操作系统异常。
或随意catch并忽视异常。
或没有对应防御机制造成内存泄露/漏过初始化等问题。

10.夸张的参数表。
不对参数封装或抽象为对象。使得接口难用/易出错/无谓的参数copy。

11.盲目使用c的不良遗产。
如随意的类型转换/类型擦除/函数参数默认值/函数变参/滥用union代替转换函数等等。代码建立在过多的隐喻上。

12.滥用const关键字。
过分强调使用const,近乎原教旨主义。绑架别人的接口也无谓提升复杂度。

13.不了解/不愿用stl。
排序,搜索,数组,字符串都单写一套。问题多,效率差,还不方便使用。就是懒得看看stl手册。造一些无聊的轮子。

14.滥用继承机制。
从不组合。一说扩展功能就想到继承,甚至多重继承。把类型写得庞大臃肿。最后发现很难不动接口做任何改动。然后完蛋。

15.不封装数据成员;滥用静态/全局成员。
代码中飞线如乱麻。高度耦合。一有新需求就傻眼。

16.滥用虚函数。
鼓吹一切皆虚。直到某天在构造函数里调了一下……

17.从不画图。
业务逻辑混乱,代码层次模糊,对象生存期说不清楚。随意持有其他对象指针。总抱怨意料之外的事发生。

18.滥用operator/滥用模板机制/滥用宏。
追求语法糖。把简单代码写到编辑器推导不出才满意。

19.不理解浮点值。
最常见的是把经过运算的float直接和定值比较。出现问题怪CPU不靠谱。

20.无视warning。
认为能通过编译就大功告成了。然后埋一个如分支无返回值之类的雷到运行时。

21.分不清平台API/专属库与C/C++标准库。
比如用MFC在win下写服务器。然后发现在Linux上无法编译部署。

22.不写或不会写测试。
从不用代码测试代码,拿测试人员或用户当小白鼠。
或把一段简陋的临时代码插到程序某处运行。觉得能跑就把测试删除了。

23.过度具象的盲目追求“性能”。
设计时言必提性能。
茴字100种写法全都为性能。
高估函数调用开销。
高估new/delete的开销。
然后使用dowhile处理分枝。
……
把代码搞得像狗屎。

24.只用一种技术/语言/平台。
一切没听过的东西都不存在。

25.常见问题不想了解。
比如不理解字符编码与传输格式的区别;
不知道各种调用约定的区别。
……
这种太多了。其实就是花几分钟看看书的事。

26.自己的代码是金口玉言。
代码从不重构。也不许别人动。当你指出某某行缺陷,对方却说NN年都用过来了,肯定靠谱。

27.喜欢用名字误导别人。
注释与代码对不上,命名与作用都不上,变量名与类型对不上。
每次看到如“军衔”(rank)与“角色等级”(playerLevel)两个变量相比较时就想抽人。

28.神奇的变量前缀。
当你看到m_lprpglpmcCur时,会想到这事啥?会理解成当前的RPGLocalPlayerMotionController*吗?这缩写完全是把人搞昏。另外即使没有IDE提示,我也认为这东西一点用都没有。缩小变量作用范围才是更好的选择。

29.不了解语言/库的特性却乱用。
如算符优先级问题;如表达式取值次序问题;
如不同版本vector实现差异问题;
如临时对象做参数传递问题;
……
天天嚷着语言坑,其实就是自己low。

30.大魔术师。
如把栈上的char[]cast为某类型后,手动调构造/析构,玩凭空造物。
如在对象里克隆自己,干掉自己,在把新对象塞回自己的管理器里,玩金蝉脱壳。
……
总之就是有话不好好说,多种方式花样作死。


作者:大狐狸
链接:https://www.zhihu.com/question/26134373/answer/91025385
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。



COPYRIGHT 2020美辰信息技术 版权所有 备案号:鲁ICP备15017533号