代码风格的基本原则是:简明,易读,无二义性。
-------------------------------------------------
1、 缩进
是用Tab键好,还是2、4、8个空格?
推荐:4个空格,在VS2005和其他的一些编辑工具中都可以定义Tab键扩展成为几个空格键。不用 Tab键的理由是Tab键在不同的情况下会显示不同的长度。4个空格的距离从可读性来说正好。
2、 行宽
行宽必须限制,但是以前有些文档规定的80字符行宽太小了(以前的计算机/打字机显示行宽为80字符),现在时代不同了,可为100字符。
3、 括号
在复杂的条件表达式中,用括号清楚地表示逻辑优先级。
4、 断行与空白的{ }行
最精简的格式A:
if (condition) DoSomething();
else DoSomethingElse();
有人喜欢这样,因为可以节省几行,但是不同的语句(Statement)放在一行中,会使程序调试(DeBug)非常不方便,如果要一步一步观察condition(condition有可能是包含函数调用的复杂表达式)中各个变量的变化情况,单步执行就很难了。
上面程序中没有明确的“{”和“}”来判断程序的结构,在有多层控制嵌套的时候,就不容易看清结构和对应关系。
采用如下风格的程序:
if ( condition) {
DoSomething();
} else {
DoSomethingElse();
}
或者
if ( condition)
{
DoSomething();
}
else
{
DoSomethingElse();
}
5、 分行
不要把多行语句放在一行上。
a = 1; b = 2; // bogus
if (fFoo) Bar(); // bogus
更严格地说,不要把不同的变量定义在一行上。
Foo foo1, foo2; // bogus
6、 命名
采用有意义的变量和方法名称。
一般使用匈牙利命名规范。
7、 下划线问题
下划线用来分隔变量名字中的作用域标注和变量的语义,如:一个类型的成员变量通常用m_来表示。
8、 大小写问题
由多个单词组成的变量名,如果全部都是小写,很不易读,一个简单的解决方案就是用大小写区分它们。
Pascal——所有单词的第一个字母都大写;
Camel——第一个单词全部小写,随后单词随Pascal格式,这种方式也叫lowerCamel。
一个通用的做法是:所有的类型/类/函数名都用Pascal形式,所有的变量都用Camel形式。
类/类型/变量:名词或组合名词,如Member、ProductInfo等。
函数则用动词或动宾组合词来表示,如get/set; RenderPage()。
9、 注释
谁不会写注释?但是,需要注释什么?
不要注释程序是怎么工作的(How),你的程序本身就应该能说明这一问题。
//this loop starts the i from 0 to len, in each step, it
// does SomeThing
for (i = 0; i<len; i++)
{
DoSomeThing();
}
以上的注释是多余的。
注释是用来解释程序做什么(What),为什么这样做(Why),以及要特别注意的地方的,如下:
//go thru the array, note the last element is at [len-1]
for (i = 0; i<len; i++)
{
DoSomeThing();
}
复杂的注释应该放在函数头,很多函数头的注释都是解释参数的类型等的,如果程序正文已经能够说明参数的类型in/out等,就不要重复!
注释也要随着程序的修改而不断更新,一个误导的(Misleading)注释往往比没有注释更糟糕。
另外,注释(包括所有源代码)应只用ASCII字符,不要用中文或其他特殊字符,它们会极大地影响程序的可移植性。
在现代编程环境中,程序编辑器可以设置各种好看的字体,我们可以使用不同的显示风格来表示程序的不同部分。