原地址:http://bbs.csdn.net/topics/320120108
从一个人的代码格式,其实可以猜出此人的C/C++大致水平,凡是写过正式项目的人,代码风格不会太差的,有些代码风格规则得到了普遍认同,有些确仍存争议。
下面列举一些仍存争议的代码风格。
1.空参数的函数是否得用fuc(void)格式
多次在一些书里看到空参数的函数得用void来填补形参表,但是在实际编程以及见到过的许多项目里——无论是开源项目还是微软的一些库,fuc()仍然是很普遍的写法。
观点:是否加void对于代码逻辑本身没有任何影响,可读性上差别也不大,除非项目硬性要求或者初学的时候养成了习惯,个人感觉是不是一定要加void不那么重要。正因为如此,fuc()仍然大行其道,通常也不被看做明显的风格缺陷。
2.大括号的对齐
1
2
3
4
5
6
7
8
9
|
if ()
{
}
if (){
}
|
这两种代码那种风格更好呢?VC、VA、Eclipse的自动格式化倾向于前者,但是有许多开源项目和教材上的代码又明显是由后者,谁优谁劣恐怕又要牵涉到操作系统和编程环境的口水仗了……很明显,微软提倡的代码风格明显属于前者,而后者在开源项目中大量出现。
观点:入乡随俗,在VC里写后者不伦不类,跟着VS+VA的自动格式化走吧;Linux下倒是随便,看项目组整体的要求。
3.单行循环和单行条件的大括号是否省略
一般书上说任何时候都加大括号是比较好的选择。当然,保证没有歧义的情况下(主要是if、else的歧义),不加括号也能让代码显得更紧凑。
提到这点主要是反驳一个观点——有人说加不加括号会造成效率差别……这完全是无稽之谈,经过测试,在VS2008中,无论什么优化选项,单行循环加不加括号生成的汇编代码都是一样的,如果你是TC测出的效率差别,那只能说编译器太烂了!
观点:我个人的观点倒不像书上那么绝对(任何时候都加)。我感觉条件语句加括号避免歧义是应该的;而单行循环一般没有歧义,而且不加括号显得很紧凑,我推荐不加;那种多层的循环和条件,加括号增加可读性,最好加上。
4,变量初始化
本来没有任何争议,但是无论谭浩强的书还是“权威”的K&R的书做的都不好,才造成了许多人认为不初始化才是“权威”。
观点:没什么说的,不初始化的人一看就知道没写过几行代码,没有为那种因为不初始化而造成的bug烦恼过。
5.变量声明位置
由于受变量位置较严格的C标准影响,许多人似乎喜欢在头部一股脑的把变量声明完。这自然是有道理的,纯C编译器要求这样声明(比如VS2005、VS2008加上/TC选项或者使用extern "C")。不过C++里的兼容的C就没这个限制了,因为C++可能有较大的自定义类型,开始就声明有效率损失。
观点:请看你的编译器,C++的*方式自然好,但如果编译器限制就没办法了。我提醒注意的是,如果C++方式编译,就没有必要死抱C的声明格式了。
6.短代码的换行
1
2
3
4
|
i++;j--; { return 0;}
。。。。。 |
在项目代码中我们经常能看到这样的代码,因为短小,就没有换行了。
观点:我看这种代码总是不舒服,特别是那个return 0;我宁可直接把括号去了……