1、布局:
头文件布局
#ifndef 文件名_H(全大写) #define 文件名_H 其它条件编译选项
#include(依次为标准库头文件、非标准库头文件)
常量定义
全局宏
全局数据类型
类定义
模板(template)(包括C++中的类模板和函数模板) 全局函数原型 #endif
C文件文件头(参见第三章“注释”)
#include(依次为标准库头文件、非标准库头文件)
常量定义
文件内部使用的宏
文件内部使用的数据类型
全局变量
本地变量(即静态全局变量)
局部函数原型
类的实现
全局函数
局部函数
if、else、else if、for、while、do等语句自占一行,执行语句不得紧跟其后。不论执行语句有多少都要加 { }。
所有运算符两端应该各有至少一个空格
程序的分界符‘{’和‘}’应独占一行并且位于同一列,同时与引用它们的语句左对齐。{ }之内的代码块使用缩进规则对齐。 正例:
void Function(int iVar) {
// 独占一行并与引用语句左对齐。
while (condition) { DoSomething();
// 与{ }缩进4格 } }
Switch规则: Switch(iCode) { case 1: break;
case 2:
break;
default:
break; } 或者
Switch(iCode) { case 1: break;
case 2:
break;
default:
break; }
不同逻辑程序块之间要使用空行分隔。 正例:
void Foo::Hey(void) { [Hey实现代码] } // 空一行 void Foo::Ack(void) { [Ack实现代码] }
括号内空格添加规则 正例:
例子中的 凵 代表空格。
for凵(i凵=凵0;凵i凵
for(i凵=凵0;凵i凵
长表达式(超过80列)要在低优先级操作符处拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要进行适当的缩进,使排版整齐。 说明:条件表达式的续行在第一个条件处对齐。
for循环语句的续行在初始化条件语句处对齐。 函数调用和函数声明的续行在第一个参数处对齐。 赋值语句的续行应在赋值号处对齐。 正例:
if ((iFormat == CH_A_Format_M)
&& (iOfficeType == CH_BSC_M)) // 条件表达式的续行在第一个条件处对齐 {
DoSomething(); }
for (long_initialization_statement; long_condiction_statement;
// for循环语句续行在初始化条件语句处对齐 long_update_statement) {
DoSomething(); }
// 函数声明的续行在第一个参数处对齐 BYTE ReportStatusCheckPara(HWND hWnd,
BYTE ucCallNo,
BYTE ucStatusReportNo);
// 赋值语句的续行应在赋值号处对齐
fTotalBill = fTotalBill + faCustomerPurchases[iID] + fSalesTax(faCustomerPurchases[iID]);
2、注释规则:
文件头部注释格式:(中英文不做硬性要求,假如多人次对已有注释存在异议,则建议修改)
文件头部的中文注释:
/********************************************************************* * 内容摘要: // 简要描述本文件的内容,包括主要模块、函数及其功能的说明 * 其它说明: // 其它内容的说明 * 当前版本: // 输入当前版本
* 作
者: // 输入作者名字及单位
* 完成日期: // 输入完成日期,例:2000年2月25日 *
* 修改记录1:// 修改历史记录,包括修改日期、修改者及修改内容 *
修改日期: *
版 本 号: *
修 改 人: *
修改内容:
* 修改记录2:…
**********************************************************************/
下面是文件头部的英文注释:
/*********************************************************************** * Description:
// 简要描述本文件的内容,完成的主要功能 * Others:
// 其它内容的说明 * Version:
// 输入当前版本 * Author:
// 输入作者名字及单位 * Date:
// 输入完成日期,例:2001-12-12 *
* History 1:
// 修改历史记录,包括修改日期、修改者及修改内容 *
Date: *
Version: *
Author:
*
Modification:
* History 2: …
**********************************************************************/
函数头部注释规则:(中英文不做硬性要求,假如多人次对已有注释存在异议,则建议修改)
下面是函数头部的中文注释:
/********************************************************************** * 功能描述: // 函数功能、性能等的描述
* 访问的表: //(可选)被访问的表,此项仅对于有数据库操作的程序 * 修改的表: //(可选)被修改的表,此项仅对于有数据库操作的程序
* 输入参数: // 输入参数说明,包括每个参数的作用、取值说明及参数间关系 *
//多行第二行 * 输出参数: // 对输出参数的说明。 * 返 回 值: // 函数返回值的说明
* 其它说明: // 其它说明
*修改记录1:// 修改历史记录,包括修改日期、修改者及修改内容 *
修改日期: *
版 本 号: *
修 改 人: *
修改内容:
***********************************************************************/
下面是函数头部的英文注释:
/********************************************************************** * Description:
* Table Acceed: * Table Updated: * Input:
// 函数功能、性能等的描述
//(可选)被访问的表,此项仅对于有数据库操作的程序 //(可选)被修改的表,此项仅对于有数据库操作的程序
// 输入参数说明,包括每个参数的作用、取值说明以及参数间关系
// 对输出参数的说明 // 函数返回值的说明
// 其它说明
// 修改历史记录,包括修改日期、修改者及修改内容 * Output: * Return: * Others:
* History 1:
*
Date: *
Version: *
Author:
*
Modification:
* History 2: …
**********************************************************************/
注释尽量多加(源程序有效注释量以20%为参考)在逻辑处理以及变量说明上;注释所加位置为代码上侧(代码过长时加在上方,且需要与代码对齐)或者右侧;
3、文件命名规则
以能将代码实现功能做一概括性描述为准则,大小写不限,最好全部小写
4、变量以及函数规则:
函数:
A、功能内部封装的尽量加static;
B、命名:功能描述+动词+名词(FuncDoSomething);
变量:
A、功能内部封装的尽量加static; B、非指针命名:类型+描述(s8Temp) C、指针命名:p+类型+描述(float *pfTemp uint8 *pu8Temp) D、部分只是用于循环的变量可不受此限制,比如(for i= 0;……
结构体:(以小写t开头,后缀Def) typedef struct tForExampleDef {
}tForExampleDef; tForExampleDef tTestDevice, *ptTestDevice;
联合:(以小写u开头,后缀Def) typedef union uForExampleDef {
}uForExampleDef, *puForExampleDef; uForExampleDef uTestDevice;
5、强制规则:
A、涉及常量的逻辑判断,常量放前面;
B、指针定义时置空,释放时置空,使用时判断是否为空;