C++ FAQs:为什么要把代码写的规范?

C++ FAQs:
为什么要把代码写的规范?

每当我教一个新手写程序的时候,反复要给他强调的就是一定要把代码写规范,说简单点,就是千篇一律,让一千个一万个人写出来的代码几乎都是一个模样。

对于规范性,我们要遵守的只有两条
1.尽力符合现有行业标准,比如ISO C++标准,POSIX,etc...
2.尽力符合此项目各程序员之间的统一约定,统一规范
3.遵守自己长久以来形成的固有习惯

为什么呢?

大概是以下几个方面的考虑。

1.尽力遵守ISO C++标准等行业标准,是因为我们希望让这段代码可以在尽可多的编译器和平台上跑起来。(当然有时候恰恰相反,我们不故意不遵守标准是为了能让这段代码在老的平台和编译器上依旧能跑起来,这是后话)。而对于一个新手,应该先学习什么是标准,再学习如何在不标准的环境下去变通。
举例:
**使用#include <cstdio>代替#include <stdio.h>
**使用static_cast等代替老式类型转换
**尽量把main函数的返回值显式声明为int,而不是省略不写

2.简单一致的代码易于阅读。尽管一个人一种风格,但是其实各类常见的C/C++风格也就不超过10种。比如如何命名变量如何书写注释等,都是有很多现成的规范的。

3.简单规范的代码不容易出错。
因为简单规范,所以只需要和类似的代码一比较,就可以发现是否有什么错误。例如,如果我们要手动实现一个for_each,

int a[10];
for(int* p=a;p!=a;a++){
//...
}

这样的代码就很规范,因为我是仿照STL的for_each算法的实现来写的。你可能会说对一个数组遍历谁都会,但是,如果是一个复杂类型,比如std::list,比如std::vector呢。保持如此类似的风格来书写,可以帮助你减少不必要的麻烦。
(p.s.代码风格甚至可以细致到'='左右是否需要留白,大括号是应该写在一行之末还是单独占一行)

4.规范的代码易于格式化程序处理。
比如,程序员总是懒得写文档,但是只要你的注释写的规范(符合某种自动化处理程序的规范),那么它就会根据你的代码把你的注释生成漂亮的参考文档。如果你一片混乱,或者同一个项目内程序员各自作主张,那么麻烦就来了。

最后说一句,各种习惯规范,也不是简单的我说这样就这样,它说那样就那样的,也都是经过老牌程序员多年经验和很多的讨论才有的。再比如上面的

for(int* p=a;p!=a;a++){
//...
} //老风格

为什么不写成

for(int* p=a;p!=a;++a){
//...
} //新风格

这样的东西就足够写上几千字来论述了。对于新手,我的建议是按照后面的新风格来书写。

最后你可能要问,我怎么知道大家一般都是按照什么的规范来写代码,我形成什么样的习惯呢?

这样几个建议

1.别人说再好,那也是别人的。如果你用不习惯,在不影响代码效率和执行结果的前提下,还是保持自我吧。

2.关于代码风格,任何一个大型项目都会有自己的文档的,比如什么gnu style,qt style,BSD style这些名字就是如此而来。所以你不妨去看看,借鉴借鉴,但是不要全搬

3.新手就是新手,老手就是老手。新手只会背诵规范、模仿老手的手法,新手要变成老手,最直接的方式就是天天操刀练习。

此博客中的热门博文

少写代码,多读别人写的代码

在windows下使用llvm+clang

tensorflow distributed runtime初窥