文章目录

  • 前言
  • 一、头文件
    • 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行业能更加的强大。加油了。

如何编写出优秀的代码相关推荐

  1. 30 多年的软件经验,总结出 10 个编写出更好代码的技巧

    30 多年的软件经验,总结 10 个最佳妙招. 那么,何以敲出一手好代码? 好代码可以定义为易读.易懂.易调试.易改,最重要的还要少缺陷.显然,要想敲出一手好代码,是要花不少时间,但这在长久来看是有意 ...

  2. 设计模式学习之简单聊聊如何写出优秀的代码

    前言: 到底什么样的代码是优秀的代码?这个恐怕是仁者见仁.智者见智的问题.一个程序员随着能力的提升和视野的开拓不同的阶段看待这个问题会有不一样的答案.不过常见的一些评判的标准,像可维护性,可扩展性.可 ...

  3. 如何在内嵌 css 中编写: hover_优秀 CSS 代码的 8 个编写技巧!

    这篇文章的目的不在于规则手册,而在于你正在编写CSS时的指南.希望能帮助大家找到自己的流程,而这篇文章的目标是让你的CSS一致,简单,易于使用. 编写基本的CSS和HTML是我们作为Web开发人员学习 ...

  4. java如何编写出菱形的代码_java编写菱形代码

    菱形代码 public class Diamond { public static void main(String[] args) { for (int i = 1; i <= 5; i++) ...

  5. 如何编写出拥抱变化的代码

    摘要:编写高效优质的代码一直是程序员所追求的目标之一,那么什么样的代码才叫优质呢?其中最重要的莫过于易维护.易修改.本文作者从面向对象和SOLID两大方面,非常详细地总结了如何编写出易修改的代码,绝对 ...

  6. 什么样的代码才是优秀的代码

    一,什么样的代码才是优秀的代码 许多去 Google 参观的人,用完洗手间后,都会惊奇而略带羞涩地问:"你们马桶前面的门上,贴着的 Python 编程规范,是用来搞笑的吗?".搞不 ...

  7. 七点建议,帮助你编写出简洁、干练的Java代码

    在每一位刚入行的程序员的心中,编写程序都是一门神圣的艺术创作.他们无不希望自己的代码作品既简洁清晰,又可读性强,而且还具有一定的容错能力.本文小千将为您带来七点建议和技巧,以帮助您编写出简洁.干练的J ...

  8. 研发周报:如何编写出拥抱变化的代码?

    我们精心为您准备了 CSDN研发频道一周最精彩的技术热点,以飨读者! 编写高效优质的代码一直是程序员所追求的目标之一,那么什么样的代码才叫优质呢?来看看这篇< 如何编写出拥抱变化的代码?> ...

  9. 21_Android中常见对话框,光传感器,通过重力感应器编写出指南针应用,帧动画,通过Jav代码的方式编写补间动画,通过XML的方式编写补间动画

     1 关于常见的对话框,主要有: 常见的对话框,单选对话框,多选对话框,进度条对话框(转圈类型的),带进度条的对话框. 案例结构: 完成如下结构的案例,将所有的案例都测试一下: 2 编写MainA ...

最新文章

  1. 黄聪:Microsoft Enterprise Library 5.0 系列教程(九) Policy Injection Application Block
  2. 计算开机时间c语言编程,计算电脑开机时间的代码
  3. c语言题库杭电,C语言杭电18级B卷试题答案.doc
  4. 虚幻四如何实现第一人称_虚幻周报20200930 | 双节快乐么么哒!
  5. mac 电脑android环境变量设置,mac上Android环境变量配置
  6. Python之数据分析(random模块的正确用法)
  7. 2020,ToB 生态全景解读
  8. 如何让iframe背景色透明
  9. SOC电源管理系统PMIC
  10. 矩阵计算与AI革命:可将计算性能提高150倍的异构计算
  11. 调用聚合数据新闻头条API
  12. 神经网络中的logits是什么意思
  13. (四)git储藏与清理
  14. 在Windows 下的 Qt 应用程序获得 Administrator 权限
  15. 系统里能看服务器型号,操作系统如何查看服务器型号
  16. forwardRef的使用
  17. 从迷之自信到逻辑自信(简版)
  18. 【线性模型引论】王松桂著 课后习题3.3参考答案
  19. 《结构性思维》读书笔记
  20. 抖音可以搬运视频吗 | 如何制作伪原创视频

热门文章

  1. 情人节的自娱自乐——情书事件
  2. 【cocos2d游戏开发实战】一款射击类小游戏《Zombie Age》的开发(一)
  3. 计算机专业秃顶图片,大学被叫惨的三大专业,计算机秃顶是常事,医学专业这个就惨了!...
  4. 使用valgrind测试gluster fuse内存泄漏问题
  5. Ant Design + react-drag-listview实现Table拖拽变换列位置
  6. Unity 实现回血效果
  7. 正在解析主机 失败:未知的名称或服务。 wget: 无法解析主机地址
  8. 自定义View之案列篇(三):仿QQ小红点
  9. Python描述数据结构之链表实战篇
  10. 微信小程序——生命周期