VC++编程规范.doc
文本预览下载声明
VC++ 编程规范
编写编程规范的目的
安全:增加代码的正确性和稳定性,使它稳定可靠
遵守编程规范可以大幅度减少各种易犯的错误和隐患。
易读:保证代码的易读性和可维护性
美观: 尽量统一项目组内人员的编程风格
便于代码调试和错误定位
在编码时就注意留下跟踪的线索会使错误定位和修改更加容易。
编程规范的作用范围
只要能写出高质量的程序,并不强求所有程序都必须完全遵循本编码规范。原则上:
外来的代码,只要测试正确,代码复查没有问题,程序文档齐全,可以有自己的规范和风格
过去的程序,原则上不为了适合本规范而专门改写程序。但是如果方便,也可以顺手做一些修改,如加一些注释。
这个规范主要针对本开发组新开发的,用VC++编写的界面或业务逻辑模块的编写。某些模块如果有自己的编程风格,请制订相应的文档加以说明。
命名规则
包括如下C++ 要素的命名:
类、结构、函数、变量、常量(包括资源、自定义消息)、宏、自定义类型等
命名的主要原则是:
使用有意义的单词或多个词组合,一目了然。不要使用人名、项目组名
命名时请考虑名字的唯一性,不要使用容易引起混淆的名称。
长短要合适。多个词组合较长时, 可以使用单词的缩写
主要采用Windows的命名风格
对于类、函数和变量,每个单词的首字符大写, 其余小写
常量和宏定义全部大写
自己定义的类型(使用了typedef)全部大写,指针使用LP大写前缀
不要用MyFile.cpp,test1.h,bitmap001.bmp, nByte, CClass等等没有意义的名字。临时使用的文件的名字要用函数生成,避免使用“硬名字”,如temp.123。不能使用程序员的姓名或缩写来命名,如yls.cpp。
类的命名
以大写的C开头,采用如下格式:
CXXXYYYYY
其中 XXX 指的是模块名称的缩写,参见附录2。 YYYYY是类本身的名称
例如: CAdmDlgSearchID
结构/自定义类型
结构/联合命名使用typedef后必须全部大写,单词中间可以使用下划线连接。
如果不使用typedef,则在全部大写的名字前加st。
结构变量的命名应尽量使用该结构的缩写前缀。前缀使用两个以上的小写字母。
自己定义的类型(使用了typedef)全部大写,指针使用LP大写前缀
函数
使用动宾词组表达函数实际所作的事
同名的函数(重载函数)在功能上应该完全相同, 在参数上的差别也应一目了然
不得出现名字非常相近但功能不同的函数. 如 CreatePage1(), CreatePage2()等
变量
变量命名原则上使用匈牙利命名法,一般由“前缀+类型修饰+主体”等部分组成,如: g_strRegHome
前缀(以下划线分割)
g_ :表示全局变量(包含全局静态变量) 如: g_lpEnv
t_ :表示线程的全局变量: 如: int __declspec(thread) t_nCount
m_ :表示类成员变量(包含类静态变量) 如: m_dwFlags
g_str :表示全局的字符串常量 如: const TCHAR g_strRegHome[] = _T(“Software\\Founder\\Founder Author Tool\\4.0”);
类型修饰(小写字母),参见附录1。
主体使用一个或多个单词表示变量代表的确切含义, 参见下面的大小写规则
窗口菜单句柄等命名: hWndxxxx, hMenuxxxx
常量(包括资源、自定义消息,枚举,宏等)
宏定义和常量全要用大写
自定义的消息 WM_A_
资源ID的命名:参见附录2:资源ID的命名。
枚举类型:命名方式类似结构,相应的前缀为enum。枚举值的命名一律大写(等同于宏)。枚举变量的命名按整数命名。
内部的限制量,如列表的最大长度,文件名的最大长度等,统一使用MAX_xxxx_xxxx_LEN来命名,并集中放置在一个头文件中。数据库相关的限制值放在另一个头文件中定义。
编程规则
类
对自己定义的复杂类一定提供构造和析构函数,
析构函数前一律加virtual,防止因继承而产生的memory leak。(有两种特殊情况:1.部支持位拷贝。2.某些特殊情况析构函数必须不是虚函数???)
在构造函数中初始化所有的成员变量,在析构函数中删除可能申请的内存空间。
推荐采用公开的Get/Set函数对成员变量进行存储,而把成员变量设成protected或者private,并加上注释。
声明成员函数和变量时要按功能分组,给外部用的要排在前面
类的继承深度不要超过4层
类的功能要单一,公共函数个数一般要小于20个(专门用于保存数据的类除外)内部protected函数以及private函数个数一般应小于20个
函数
长度一般禁止超过200行
必须检查输入值
显示全部