如何编写出优秀的代码

news/2024/12/12 22:23:47/

文章目录

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


http://www.ppmy.cn/news/437470.html

相关文章

代码编写流程

文章目录 代码编写步骤好的代码满足条件&#xff1a;注意事项 代码编写步骤 1、分析任务目标&#xff0c;根据目标选择合适的代码设计模式   1.1、创建模式选择   1.2、结构模式选择   1.3、行为模式选择 2、整理思路、画出思维导图、或代码流程图 3、找到其中的关键对象…

代码如何编写?

编写代码需要使用一种编程语言&#xff0c;并使用文本编辑器或集成开发环境(IDE)将代码编写到文件中。 通常&#xff0c;在编写代码时&#xff0c;你需要遵循一些基本规则&#xff1a; 每种编程语言都有自己的语法&#xff0c;这些语法规定了如何构造程序以及如何表达各种操作。…

使用UnityXR配置PICO开发环境

效果展示&#xff1a; 一、说明 本文环境搭建测试基于Unity2021.3.26版本进行的&#xff0c;插件版本为当前官方最新版本PICO_SDK_v2.1.5&#xff0c;根据官方的描述&#xff0c;PICO Unity Integration SDK v2.x.x 系列是长期维护版本&#xff0c;支持 PICO Neo3 和 PICO 4 全…

oracle中如何修改日期类型的字段值

系列文章目录 文章目录 系列文章目录前言一、数据库表方式进行修改二、sql方式步骤总结 前言 Oracle是一家全球领先的数据库管理系统&#xff08;DBMS&#xff09;和企业软件公司。Oracle Corporation成立于1977年&#xff0c;总部位于美国加利福尼亚州的红木城&#xff08;Re…

深度刨析指针Advanced 2

作者主页&#xff1a;paper jie的博客_CSDN博客-C语言,算法详解领域博主 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文录入于《系统解析C语言》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白…

thinkpad笔记本 fn与ctrl互换

在bios里设置一下就可以&#xff0c; 主要操作如下&#xff1a; 开机F1进入BIOS->Config->Keyboard/Mouse&#xff0c;将Fn and Ctrl Key Swap更改为Enable 具体参见&#xff1a; https://zhuanlan.zhihu.com/p/448899570

cygwin中安装g95

1.下载g95的安装包 由于g95不在现在最新的gcc中&#xff0c;如果编译需要用到g95需要独立安装&#xff0c;首先在应该下载g95的安装包&#xff0c;上百度上搜g95-x86-cygwin.tgz&#xff0c;能找到好多提供下载的地方。 2.解压安装 命令:tar zxvf g95-x86-cygwin.tgz 3.拷贝相…

炎炎夏日!东南亚LazadaShopee泳衣品类热销榜单来袭

6月商机无限&#xff0c;趁热打铁&#xff01;3大节庆即将来袭。小编特为卖家整理了6月最强爆单选品指南&#xff0c;揭秘东南亚泳衣市场。赶紧一睹为快吧&#xff01; 炎炎夏日&#xff0c;马上即将迎来暑假&#xff0c;海边游玩肯定成了小朋友即家长们的首选之地&#xff0c…