前言:
要开发出专业化的软件产品,在编码阶段,必须严格贯彻一定的代码开发准则,这会减少程式的隐含错误,同时使程式的内部结构清晰。从而开发出少错误、易维护的优质程式,使得程式的团队合作性和专业化程度大为提高。 这是软件开发中公认的一个准则,也是软件工程在编码阶段的一个具体的应用。我曾与不少编程的朋友讨论过这个问题,在实际的开发中也积累了一些心得,现在我将我所体会到的coding rule整理于下:
内容:
适用平台为32位windows,语言为以c++为基础的语言(c++,vc++...)
一.提高程序的可读性要求:
1.对你所写的每一个文件都加上相关的标准化注释,一般应包括:文件的作用、版本号信息、作者及时间等。
2.为你定义的类写详细的注释,包括作者、时间、版本修订信息、基本的算法、以及成员变量的详细解释等。
3.为你定义的每一个函数写详细的注释,包括输入输出参数说明、返回值说明、函数功能说明。
********************************************************************************
4.在函数的内部,长条注释(划分功能模块)、短条注释(说明实现的各步骤)与句后解释(说明重要句的意义)相结合,清晰功能的实现层次。
file://*************下面实现如下功能 *****************
file://进行...操作(1)。
..............
.............. file://此操作作用为...。
file://进行...操作(2)。
5.所有命名(类、函数、变量..)均要求意义明确易于理解。
6.避免在代码中直接使用数字和true/false等不确定意义的词,尽量使用有意义的串值代替。
const static word w_person_num = 10;
bool bmustprocess = true;
7.最好不要出现向“if(test)等”逻辑判断语句,用以下代替:
if( true == test)
if( personnum == test)
if(null != test).
8.不要使用goto。
9.不要写太长的if(){...},for(){...},while(...){}或者太多的嵌套。
10.对上述较长者在范围结束处加注释。如//for 循环结束
11.在名字上区分各种变量及函数
类成员变量:m_*,全局变量:g_*,api函数:::。
二.消除程序中的隐患
降低耦合性:
1.只有被其他类引用的函数才定义成public型函数。
2.类中最好不用public型成员变量(经典代替方法:为这个变量写get与set函数)。
3.最好不使用全局变量。
说明:可以在c*app类中指定,然后使用afxgetapp()->***来使用
提高聚合性:
1.一个公用的成员函数不可返回所在类的成员变量的指针或非常量的引用。
2.使用一个类,在可能的情况下(仅通过指针或引用被访问的类),应将类的头文件包含在使用者的.cpp文件中,提高封装性,同时避免重复包含(类为自定的情况下)。如果必须在使用者的.h文件中包含此类的头文件,应使用ifdef...语句避免重复包含。
3.函数的功能应单一,参数的意义应该单一。
基本规则:
1.尽量使用括号来清晰计算表达式的顺序。
2.使用引用参数来代替指针参数(明晰语义;保证传递时已经初始化了;保持效率)。
3.变量定义时应赋初值。
4.使用null == *,false == *,代替 * == null,* ==false...。
说明:避免笔误
5.使用null;空语句。
while(---)null; file://避免笔误(误加分号)
6.使用const static 代替 #define(使用编译器的类型检查机制)。
7.所有含虚函数的类的析构函数必须是虚析构函数。
8.在vc下编程时,设置编译选项“warning level”为“level 4”(启动编译器所有的预警功能)。
9.函数中自己编制的return前,最好应用系统默认值。
10. debug版与release版。
#ifdef debug #define debug
......
.....
#endif #undef debug
11. 反安装时,应移去所有我们自定义的dll,lib,ocx,注册表项...。
内存相关问题:
1.在分配内存(如图形结构...)时,应该先使用memset(..)等函数赋值内 存。
exm1: bitmap bm; ::memeset(&bm,0,sizeof(bitmap)); exm2: tchar tszname[max_path]; ::memeset(tszname,0,sizeof(tchar) * max_path);
| xx | 前缀 | xx | 前缀 |
| 类class | c | bool->bool | b |
| 成员变量 | m_ | byte | by |
| 全局变量 | g_ | char->tchar | tch |
| api函数 | :: | word | w |
| 指针 | p/lp | dword | dw |
| 句柄 | h | int->long | l |
| lptstr | lpsz | float | f |
| lpctstr | lpcsz | double | db |
| point | pt(diff for p) | rect | rt |
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器