Guidelines to improve your code
您遵循什么准则来提高代码的总体质量?许多人都有关于如何编写C ++代码的规则,这些规则(据说)会使出错更加困难。我见过人们坚持认为,每个 我对其他人遵循的准则以及背后的原因感兴趣。我对您认为是垃圾但普遍使用的准则也很感兴趣。有人可以建议一些吗? 为了使事情顺利进行,我将首先介绍一些:
但是,如果使用括号,它将按预期工作。
现在交给您。 我个人的一些最爱: 努力编写const正确的代码。您将邀请编译器帮助您清除容易修复但有时很痛苦的错误。您的代码还将讲述您编写代码时的想法-一旦您离开,对于新手或维护者来说都是有价值的。
退出内存管理业务。学习使用智能指针: 您可能会使用标准模板库。阅读Josuttis书。不要仅仅在关于容器的前几章之后停下来,以为您知道STL。深入研究好东西:算法和函数对象。 就这些。
打开您可以在编译器中看到的所有警告(gcc:
其中一个答案中提到的Google风格指南非常扎实。其中有一些毫无意义的东西,但它总有好有坏。 Sutter和Alexandrescu在这方面写了一本不错的书,叫做C ++编码标准。 这里有一些来自lil'ole me的一般提示: 您的缩进和包围样式都是错误的。其他人也一样。因此,请遵循该项目的标准。吞下自豪感并设置您的编辑器,以使所有内容与其余代码库尽可能保持一致。不得不阅读不一致缩进的代码真的很烦人。就是说,括号和缩进与"改进代码"没有任何关系。这更多地是关于提高与他人合作的能力。 好的评论。这是非常主观的,但是总的来说,写注释说明代码为什么会按其方式工作总是好事,而不是解释其工作方式。当然,对于复杂的代码,对可能不熟悉算法或代码的程序员也有一个很好的想法也很有益。非常欢迎链接到所用算法的描述。 以尽可能简单的方式表达逻辑。具有讽刺意味的是,诸如"在比较左侧放置常量"之类的建议在这里出错了。它们非常受欢迎,但是对于讲英语的人,他们经常破坏程序对那些阅读者的逻辑流程。如果您不信任自己(或您的编译器)正确编写相等比较,那么请务必使用此类技巧。但是,这样做时您会牺牲清晰度。诸如此类的事情也属于这一类:"我的逻辑是否具有3个缩进级别?会更简单吗?"并将类似的代码滚动到函数中。甚至拆分功能。编写优雅地表达底层逻辑的代码需要经验,但值得一试。 那些很一般。对于特定的提示,我无法比Sutter和Alexandrescu做得更好。 在if语句中,将常量放在左侧,即
不
因为如果您错过键入" =",那么它将成为赋值。在最高版本中,编译器说这是不可能的,在后者中它会运行并且if始终为true。 每当它们不在同一行时,我都会用大括号表示。
打开和关闭大括号总是有自己的特点。但这当然是个人习惯。 仅在仅需要解释代码的功能时才发表评论,而在阅读代码的过程中并不能告诉您相同的内容。 不要注释掉不再使用的代码。如果要恢复旧代码,请使用源代码控制系统。注释掉代码只会使事情看起来混乱,并使实际上很重要的注释逐渐淡入注释代码的背景。 Google内部还使用了不错的C ++样式指南,其中包括此处提到的大多数规则。 开始写很多评论-但要以此为契机重构代码,以使其易于说明。 即:
应该更像
同样,您可能会在这里找到一些有用的建议:如何使错误的代码看起来不正确?您使用什么模式来避免语义错误?
六个月后再看 如果可以,请使用前增量而不是后增量。 我在C ++项目上使用PC-Lint,尤其喜欢它引用现有出版物的方式,例如MISRA准则或Scott Meyers的"有效C ++"和"更有效的C ++"。即使您打算为静态分析工具检查的每个规则编写非常详细的说明,也要指出用户信任的已建立出版物是一个好主意。 这是我由C ++专家提供的最重要的建议,它在一些关键情况下帮助我在代码中查找错误:
使用这两个规则,编译器将免费告诉您代码中逻辑存在缺陷的地方! 另外,对于某些好的技巧,您可以关注Google的博客"马桶上的测试"。 确保您正确缩进 智能指针具有一种非常清晰地指示所有权的好方法。如果您是类或函数:
我发现auto_ptr的情况特别强烈:在设计中,如果看到auto_ptr,我立即知道该对象将从系统的一部分"漫游"到另一部分。 至少这是我在宠物项目中使用的逻辑。我不确定该主题可以有多少种变化,但是直到现在,这个规则集对我还是很有帮助。 嗯-我可能应该更具体一些。 我并不是在为自己寻找建议-我正在编写一个静态代码分析工具(当前的商业产品还不足以满足我的需求),我正在寻找插件的想法以突出可能的方法代码中的错误。 一些人提到了const正确性和使用智能指针之类的东西-我可以检查这种想法。检查缩进和注释有点困难(无论从编程角度来看)。 |