您遵循哪些指导原则来提高代码的一般质量?许多人都有关于如何编写C++代码的规则,这些代码可能会使错误变得更加困难.我见过人们坚持认为每个if
语句后跟一个大括号块({...}
).
我对其他人遵循的指导方针及其背后的原因感兴趣.我也对您认为是垃圾的指导方针感兴趣,但通常都是这样.有人可以推荐一些吗?
为了让球滚动,我将提到一些开始:
在每个if
/ else
语句之后总是使用大括号(如上所述).这背后的基本原理是,判断单个语句实际上是一个语句,还是扩展为多个语句的预处理器宏并不总是很容易,因此这段代码会破坏:
// top of file: #define statement doSomething(); doSomethingElse // in implementation: if (somecondition) doSomething();
但如果你使用大括号,那么它将按预期工作.
仅使用预处理器宏进行条件编译.预处理器宏可能导致各种地狱,因为它们不允许C++作用域规则.由于预处理器宏在头文件中具有通用名称,因此我多次搁浅.如果你不小心,你可能会造成各种各样的破坏!
现在告诉你.
我个人的一些最爱:
努力编写const正确的代码.您将使用编译器来帮助清除容易修复但有时很痛苦的错误.您的代码还将讲述您编写时的想法 - 一旦您离开,对新手或维护者有价值.
摆脱内存管理业务.学习使用智能指针:std::auto_ptr
,std::tr1::shared_ptr
(或boost::shared_ptr
)和boost::scoped_ptr
.了解它们之间的差异以及何时使用一个与另一个相比.
您可能会使用标准模板库.阅读Josuttis的书.不要只是在容器上的前几章之后停下来认为你知道STL.推进到好东西:算法和功能对象.
删除不必要的代码
就这些.
使用并实施通用的编码风格和指南.基本原理:团队或公司中的每个开发人员都能够阅读代码而不会因为不同的支撑类型或类似情况而产生干扰.
定期对整个源代码库进行完全重建(即每次签入后进行每日构建或构建)并报告任何错误!理由:源几乎总是处于可用状态,并且在"实施"之后不久就会检测到问题,解决问题的方法很便宜.
打开你可以在编译器中站起来的所有警告(gcc:-Wall
是一个好的开始,但不包括所有内容,所以检查文档),并使它们出错,所以你必须修复它们(gcc:)-Werror
.
谷歌的风格指南在其中一个答案中提到,非常可靠.其中有一些毫无意义的东西,但它比坏的更好.
Sutter和Alexandrescu写了一本关于这个主题的书,称为C++编码标准.
以下是lil'ole me的一些一般提示:
你的缩进和包围风格都是错误的.其他人也是如此.因此,请遵循项目的标准.吞下你的骄傲并设置你的编辑器,以便一切尽可能与代码库的其余部分保持一致.读取不一致的代码真的很烦人.也就是说,包围和缩进与"改进代码"没有任何关系.它更多的是提高与他人合作的能力.
好评.这是非常主观的,但总的来说,编写关于代码为何如此工作的注释总是好的,而不是解释它的作用.当然,对于复杂的代码,这也有利于程序员谁可能不熟悉的算法或代码,有一个想法是什么它做也是如此.非常欢迎使用所用算法描述的链接.
以尽可能简单的方式表达逻辑.我认为,具有讽刺意味的建议,例如"将常数放在比较的左侧"这里出现了问题.它们非常受欢迎,但对于说英语的人来说,它们往往会破坏程序的逻辑流程.如果你不能相信自己(或你的编译器)正确地写出相等比较,那么一定要使用这样的技巧.但是当你这样做时,你会牺牲清晰度.同样属于这一类的是......"我的逻辑是否有3级缩进?这可能更简单吗?" 并将类似的代码滚动到函数中.甚至可能拆分功能.编写优雅地表达底层逻辑的代码需要经验,但值得一试.
那些很普遍.对于具体的提示,我不能比Sutter和Alexandrescu做得更好.