文章目录
- 前言
- 一、头文件
- 1、头文件有三部分组成
- 2、引用头文件的规则和建议
- 3、头文件的作用
- 4、定义文件和目录结构
- 二、程序的版式和格式
- 1、空行
- 2、代码行
- 3、代码行内的空格
- 4、对齐
- 5、长行拆分
- 6、修饰符的位置
- 7、注释
- 三、命名规则
- 1、共性规则
- 四、总结
前言
IT行业的成熟,互联网公司更大的竞争,以及整个行业的成熟,自然对程序员的要求越发的高。
要想提高代码水平,不仅需要自身的硬实力,还需要一个好的编程习惯。良好的代码风格,更是能大大提高代码的正确性,可读性,可移植性以及代码的效率。为能够编写出高质量c/c++程序打下良好的基础。
提高编程质量就是要从点点滴滴做起,
世上不存在最好的编程风格,一切因需求而定。以下规则和良好的风格参考自《高质量C/C++编程》这本神书。
一、头文件
1、头文件有三部分组成
{ ( 1 )头文件开头处的版权和版本声明。 ( 2 )预处理块。 ( 3 )函数和类结构声明等。 \left\{ \begin{aligned} &(1)头文件开头处的版权和版本声明。 & \ \\ &(2)预处理块。 & \ \\ & (3)函数和类结构声明等。 & \ \end{aligned}\right. ⎩ ⎨ ⎧(1)头文件开头处的版权和版本声明。(2)预处理块。(3)函数和类结构声明等。
2、引用头文件的规则和建议
【规则 1】用 #include <filename.h> 格式来引用标准库的头文件
(编译器将从标准库目录开始搜索)。
#include <math.h> // 引用标准库的头文件
【规则 2】用 #include “filename.h” 格式来引用非标准库的头文件
(编译器将从用户的工作目录开始搜索)。
#include “myheader.h” // 引用非标准库的头文件
【建议 1】头文件中只存放“声明”而不存放“定义.”建议将成员函数的定义与声明分开,不论该函数体有多么小.
3、头文件的作用
(1)通过头文件来调用库功能。
(2)头文件能加强类型安全检查。
4、定义文件和目录结构
定义文件有三部分内容:
(1) 定义文件开头处的版权和版本声明。
(2) 对一些头文件的引用。
(3) 程序的实现体(包括数据和代码)。
目录结构:
如果一个软件的头文件数目比较多(如超过十个),通常应将头文件和定义文件分别保存于不同的目录,以便于维护。
二、程序的版式和格式
1、空行
【规则 3】在每个类声明之后、每个函数定义结束之后都要加空行。
// 空行
void Function1(…)
{ …
}
// 空行
void Function2(…)
{ …
}
// 空行
void Function3(…)
{ …
}
【规则 4】在一个函数体内,逻揖上密切相关的语句之间不加空行,其它地方应加空行分隔。
// 空行
while (condition)
{ statement1;
// 空行
if (condition)
{ statement2;
}
else
{ statement3;
}
// 空行statement4;
}
2、代码行
【规则 5】一行代码只做一件事情,如只定义一个变量,或只写一条语句。
这样的代码容易阅读,并且方便于写注释。
【规则 6】if、for、while、do 等语句自占一行,执行语句不得紧跟其后。
不论执行语句有多少都要加{}。这样可以防止书写失误
int width; // 宽度
int height; // 高度
int depth; // 深度 x = a + b;
y = c + d;
z = e + f; if (width < height)
{
dosomething();
}for (initialization; condition; update)
{
dosomething();
}
// 空行
other();
【建议 2】尽可能在定义变量的同时初始化该变量(就近原则) 如果变量的引用处和其定义处相隔比较远,变量的初始化很容易被忘记。如果引用了未被初始化的变量,可能会导致程序错误。
int weight = 70;
int high = 180;
int depth = 10;
3、代码行内的空格
【规则 7】关键字之后至少要留一个空格,否则无法辨析关键字。
像 if、for、while 等关键字之后应留一个空格再跟左括号‘( ’ ,以突出关键字。
【规则 8】函数名之后不要留空格,紧跟左括号‘( ’ ,以与关键字区别。
【规则 9】‘,’之后要留空格,如 Function(x, y, z)。如果‘;’不是一行的结束符号,其后要留空格。
【规则 10】赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符,等二元操作符的前后应当加空格。
【规则 11】一元操作符前后不加空格。
【规则 12】象"[]"、 “.” 、“->”这类操作符前后不加空格。
【建议 3】对于表达式比较长的 for 语句和 if 语句,为了紧凑起见可以适当地去掉一些空格。
void Func1(int x, int y, int z); // 良好的风格
void Func1 (int x,int y,int z); // 不良的风格if (year >= 2000) // 良好的风格
if(year>=2000) // 不良的风格
if ((a>=b) && (c<=d)) // 良好的风格
if(a>=b&&c<=d) // 不良的风格for (i=0; i<10; i++) // 良好的风格
for(i=0;i<10;i++) // 不良的风格
for (i = 0; I < 10; i ++) // 过多的空格x = a < b ? a : b; // 良好的风格
x=a<b?a:b; // 不好的风格int *x = &y; // 良好的风格
int * x = & y; // 不良的风格
4、对齐
【规则 13】程序的分界符‘{’和‘}’应独占一行并且位于同一列,同时与引用它们的语句左对齐。
【规则 14】{ }之内的代码块在‘ { ’右边数格处左对齐
//良好风格的对齐
void Function(int x)
{
… // program code
}if (condition)
{
… // program code
}
else
{
… // program code
}for (initialization; condition; update)
{
… // program code
}While (condition)
{
… // program code
} //如果出现嵌套的{},则使用缩进对齐,如:{ … { … } …
}
5、长行拆分
【规则 15】代码行最大长度宜控制在 70 至 80 个字符以内。
代码行不要过长,否则眼睛看不过来,也不便于打印。
【规则 16】长表达式要在低优先级操作符处拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要进行适当的缩进,使排版整齐,语句可读。
6、修饰符的位置
【规则 17】应当将修饰符 * 和 & 紧靠变量名。
例如:
char *name;
int *x, y; //此处y不会被误认为指针
7、注释
【规则 18】注释是对代码的“提示”,而不是文档。
程序中的注释不可喧宾夺主,注释太多了会让人眼花缭乱。注释的花样要少。
【规则 19】如果代码本来就是清楚的,则不必加注释。否则多此一举,令人厌烦。
【规则 20】边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。
不再有用的注释要删除。
【规则 21】注释应当准确、易懂,防止注释有二义性。
错误的注释不但无益反而有害。
【规则 22】尽量避免在注释中使用缩写,特别是不常用缩写。
【规则 23】注释的位置应与被描述的代码相邻,可以放在代码的上方或右方,不可放在下方。
【规则 24】当代码比较长,特别是有多重嵌套时,应当在一些段落的结束处加注释,便于阅读。
三、命名规则
1、共性规则
【规则 25】标识符最好采用英文单词或其组合,便于记忆和阅读。
【规则 26】标识符的长度应当符合“min-length && max-info rmation”原则。
一般来说,长名字能更好地表达含义,所以函数名、变量名、类名长达十几个字符不足为怪。那么名字是否越长约好?不见得! 例如变量名 maxval 就比 maxValueUntilOverflow好用。单字符的名字也是有用的,常见的如 i,j,k,m,n,x,y,z 等,它们通常可用作函数内的局部变量。
【规则 27】命名规则尽量与所采用的操作系统或开发工具的风格保持一致。
例如 Windows 应用程序的标识符通常采用“大小写”混排的方式,如 AddChild。而 Unix 应用程序的标识符通常采用“小写加下划线”的方式,如 add_child。别把这两高质量 C++/C 编程指南,v 1.0 2001 Page 23 of 101类风格混在一起用
【规则 28】程序中不要出现仅靠大小写区分的相似的标识符。
【规则 29】程序中不要出现标识符完全相同的局部变量和全局变量,尽管两者的作用域不同而不会发生语法错误,但会使人误解
【规则 30】变量的名字应当使用“名词”或者“形容词+名词”
例如:
float value;
float oldValue;
float newValue;
【规则 31】全局函数的名字应当使用“动词”或者“动词+名词”(动宾词组)。类的成员函数应当只使用“动词”,被省略掉的名词就是对象本身
【规则 32】用正确的反义词组命名具有互斥意义的变量或相反动作的函数
例如:
int minValue;
int maxValue;
int SetValue(…);
int GetValue(…);
【建议 4】尽量避免名字中出现数字编号
四、总结
规范书写代码只是学习代码路上的第一步,走好每一步才能在成功路上走的更远。只有做好点点滴滴,做好每一次的细节处理,才能更好的写出高质量的程序出来。学海无涯苦作舟,成功的每一步都是汗水,不要放弃,坚持,才能走的更远。
希望每一位程序员朋友都能在成功的路上走的更远,也希望我们的国家在IT行业能更加的强大。加油了。