以下为《c及c 规范》的无排版文字预览,完整内容请下载
高质量的工程,一般会做到:
代码简洁精炼,美观,可读性好,高效率,高某某,可移植性好,高某某,低耦合,没有冗余,不符合这些原则,必须特别说明。
规范性,代码有规可循。特殊排版、特殊语法、特殊指令,必须特别说明。
一、文件排版方面
1.包含头文件
1.1 先系统头文件,后用户头文件。
1.2 系统头文件,稳定的目录结构,应采用包含子路径方式。
1.3 自定义头文件,不稳定目录结构,应在dsp中指定包含路径。
1.4 系统头文件应用:#include
1.5 自定义同文件应用:#include "xxx.h"
1.6 只引用需要的头文件。
2.h和cpp文件
2.1 头文件命名为*.h,内联文件命名为*.inl;C++文件命名为*.cpp
2.2 文件名用大小写混合,或者小写混合。例如DiyMainview.cpp,infoview.cpp。不要用无意义的名称:例如XImage.cpp;SView.cpp;xlog.cpp;
2.3 头文件除了特殊情况,应使用#ifdef控制块。
2.4 头文件#endif应采用行尾注释。
2.5 头文件,首先是包含代码块,其次是宏定义代码块,然后是全局变量,全局常量,类型定义,类定义,内联部分。
2.6 CPP文件,包含指令,宏定义,全局变量,函数定义。
3.文件结构
3.1 文件应包含文件头注释和内容。
3.2 函数体类体之间原则上用2个空行,特殊情况下可用一个或者不需要空行。
4.空行
4.1 文件头、控制块,#include部分、宏定义部分、class部分、全局常量部分、全局变量部分、函数和函数之间,用两个空行。
二、注释方面
1.文件头注释
1.1 作者,文件名称,文件说明,生成日期(可选)
2.函数注释
2.1 关键函数必须写上注释,说明函数的用途。
2.2 特别函数参数,需要说明参数的目的,由谁负责释放等等。
2.3 除了特别情况,注释写在代码之前,不要放到代码行之后。
2.4 对每个#else或#endif给出行末注释。
2.5 关键代码注释,包括但不限于:赋值,函数调用,表达式,分支等等。
2.6 善未实现完整的代码,或者需要进一步优化的代码,应加上?// TODO ...
2.7 调试的代码,加上注释?// only for DEBUG
2.8 需要引起关注的代码,加上注释?// NOTE ...
2.9 对于较大的代码块结尾,如for,while,do等,可加上?// end for|while|do
三、命名方面
1.原则
1.1 同一性:在编写一个子模块或派生类的时候,要遵循其基类或整体模块的命名风格,保持命名风格在整个模块中的同一性。
1.2 标识符组成:标识符采用英文单词或其组合,应当直观且可以拼读,可望文某某,用词应当准确,避免用拼音命名。
1.3 最小化长度 && 最大化信息量原则:在保持一个标识符意XX确的同时,应当尽量缩短其长度。
1.4 避免过于相似:不要出现仅靠大小写区分的相似的标识符,例如"i"与"I","function"与"Function"等等。
1.5 避免在不同级别的作用域中重名:程序中不要出现名字完全相同的局部变量和全局变量,尽管两者的作用域不同而不会发生语法错误,但容易使人误解。
1.6 正确命名具有互斥意义的标识符:用正确的反义词组命名具有互斥意义的标识符,如:"nMinValue"?和?"nMaxValue","GetName()"?和"SetName()"?….
1.7 避免名字中出现数字编号:尽量避免名字中出现数字编号,如Value1, 内容过长,仅展示头部和尾部部分文字预览,全文请查看图片预览。 避免生成临时对象,尤其是大的临时对象。
注意大尺寸对象数组。
80-20原则。
十一、兼容性
遵守ANSI C和ISO C++国际标准。
确保类型转换不会丢失信息。
注意双字节字符的兼容性。
注意运算溢出问题。
不要假设类型的存储尺寸。
不要假设表达式的运算顺序。
不要假设函数参数的计算顺序。
不要假设不同源文件中静态或全局变量的初始化顺序。
不要依赖编译器基于实现、未明确或未定义的功能。
将所有#include的文件名视为大小写敏感。
避免使用全局变量、静态变量、函数静态变量、类静态变量。在使用静态库,动态库,多线程环境时,会导致兼容性问题。
不要重新实现标准库函数,如STL已经存在的。
[文章尾部最后300字内容到此结束,中间部分内容请查看底下的图片预览]请点击下方选择您需要的文档下载。
以上为《c及c 规范》的无排版文字预览,完整内容请下载
c及c 规范由用户“CZW_zzp”分享发布,转载请注明出处