如何练就一手让其他程序员赏心悦目的代码

用户头像
来自华南师范大学-林培创发布于:2019-11-24 11:16:24
如何写一手规范代码
点赞 (0) 回复
1F 用户头像
来自华南师范大学-林培创发布于:2019-11-24 11:19:05
C/C++代码规范 零、前言   笔者最近在看开源代码,看到代码格式各自参差不齐,感觉像是各家各有所长。因此打算写一篇关于C/C++代码规范文章,请各位参考,并践踏批评。 一、文件排版 1. 包含头文件  • 先系统头文件,后用户头文件。  • 系统头文件,稳定的目录结构,应采用包含子路径方式。  • 自定义头文件,不稳定目录结构,应在dsp中指定包含路径。  • 系统头文件应用:#include  • 自定义同文件应用:#include "*.h"  • 只引用需要的头文件。 2. h和cpp文件  • 头文件命名为.h,内联文件命名为.inl;C++文件命名为*.cpp  • 文件名用大小写混合,或者小写混合。例如DiyMainview.cpp,infoview.cpp。不要用无意义的名称:例如XImage.cpp;SView.cpp;xlog.cpp;  • 头文件除了特殊情况,应使用#ifdef控制块。  • 头文件#endif应采用行尾注释。  • 头文件,首先是包含代码块,其次是宏定义代码块,然后是全局变量,全局常量,类型定义,类定义,内联部分。  • CPP文件,包含指令,宏定义,全局变量,函数定义。 3. 文件结构  • 文件应包含文件头注释和内容。  • 函数体类体之间原则上用2个空行,特殊情况下可用一个或者不需要空行。 4. 空行  • 文件头、控制块,#include部分、宏定义部分、class部分、全局常量部分、全局变量部分、函数和函数之间,用两个空行。 二、注释 1. 文件头注释  • 作者,文件名称,文件说明,生成日期(可选) 2. 函数注释  • 关键函数必须写上注释,说明函数的用途。  • 特别函数参数,需要说明参数的目的,由谁负责释放等等。  • 除了特别情况,注释写在代码之前,不要放到代码行之后。  • 对每个#else或#endif给出行末注释。  • 关键代码注释,包括但不限于:赋值,函数调用,表达式,分支等等。  • 善未实现完整的代码,或者需要进一步优化的代码,应加上 // TODO …  • 调试的代码,加上注释 // only for DEBUG  • 需要引起关注的代码,加上注释 // NOTE …  • 对于较大的代码块结尾,如for,while,do等,可加上 // end for|while|do 三、命名 1. 原则  • 同一性:在编写一个子模块或派生类的时候,要遵循其基类或整体模块的命名风格,保持命名风格在整个模块中的同一性。  • 标识符组成:标识符采用英文单词或其组合,应当直观且可以拼读,可望文知意,用词应当准确,避免用拼音命名。  • 最小化长度 && 最大化信息量原则:在保持一个标识符意思明确的同时,应当尽量缩短其长度。  • 避免过于相似:不要出现仅靠大小写区分的相似的标识符,例如"i"与"I","function"与"Function"等等。  • 避免在不同级别的作用域中重名:程序中不要出现名字完全相同的局部变量和全局变量,尽管两者的作用域不同而不会发生语法错误,但容易使人误解。  • 正确命名具有互斥意义的标识符:用正确的反义词组命名具有互斥意义的标识符,如:"nMinValue" 和"nMaxValue","GetName()" 和"SetName()" ….  • 避免名字中出现数字编号:尽量避免名字中出现数字编号,如Value1,Value2等,除非逻辑上的确需要编号。这是为了防止程序员偷懒,不肯为命名动脑筋而导致产生无意义的名字(因为用数字编号最省事)。 2. T,C,M,R类  • T类表示简单数据类型,不对资源拥有控制权,在析构过程中没有释放资源动作。  • C表示从CBase继承的类。该类不能从栈上定义变量,只能从堆上创建。  • M表示接口类。  • R是资源类,通常是系统固有类型。除了特殊情况,不应在开发代码中出现R类型。 3. 函数名  • M类的函数名称应采用HandleXXX命名,例如:HandleTimerEvent;不推荐采用java风格,例如handleTimerEvent;除了标准c风格代码,不推荐用下划线,例如,handle_event。  • Leave函数,用后缀L。  • Leave函数,且进清除栈,用后缀LC。  • Leave函数,且删除对象,用后缀LD。 4. 函数参数  • 函数参数用a作为前缀。  • 避免出现和匈牙利混合的命名规则如apBuffer名称。用aBuffer即可。  • 函数参数比较多时,应考虑用结构代替。  • 如果不能避免函数参数比较多,应在排版上可考虑每个参数占用一行,参数名竖向对齐。 5. 成员变量  • 成员变量用m最为前缀。  • 避免出现和匈牙利混合的命名规则如mpBuffer名称。用mBuffer即可。 6. 局部变量  • 循环变量和简单变量采
加载更多
点击图片
取消
回复
发布回复
点击图片