编程代码规范.docx

上传人:b****5 文档编号:8028323 上传时间:2023-01-28 格式:DOCX 页数:34 大小:33.94KB
下载 相关 举报
编程代码规范.docx_第1页
第1页 / 共34页
编程代码规范.docx_第2页
第2页 / 共34页
编程代码规范.docx_第3页
第3页 / 共34页
编程代码规范.docx_第4页
第4页 / 共34页
编程代码规范.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

编程代码规范.docx

《编程代码规范.docx》由会员分享,可在线阅读,更多相关《编程代码规范.docx(34页珍藏版)》请在冰豆网上搜索。

编程代码规范.docx

编程代码规范

1.临时变量命名规则:

首字母小写,name1Name2.

2.常量命名规则:

大写,NAME1

3.函数命名规则:

首字母大写,Name1Name2().

4.注释规范

标准的函数注释格式;

  //==================================================================

  //函数名:

  //作者:

  //日期:

  //功能:

  //输入参数:

  //返回值:

  //修改记录:

  //==================================================================

  示例:

  //==================================================================

  //函数名:

RecordIsExist

  //作者:

jiangjingsong

  //日期:

2004-02-22

  //功能:

判断当前待插入或更新的记录在原表中是否已经存在

  //输入参数:

bm(表名)待查找的表的名字

  //zdm(字段名)在表中待查找的字段

  //zdz(字段值)需要比较的字段的值

  //返回值:

类型(boolean)

  //返回true表示当前表中存在一条跟待插入的记录一样的记录;

  //返回false表示当前待插入的记录在表中不存在。

  //修改记录:

  //==================================================================

我做C语言底层开发,积累了一些代码书写的经验供大家参考:

1.C语言书写规范

1.1符号命名规则

1.1.1符号名包括模块名、常量名、标号名、子程序名等。

这些名字应该能反映它所代表的实际东西,具有一定的意义,使其能够见名知义,有助于对程序功能的理解。

命名采用匈牙利命名法。

规则如下:

(1)所有宏定义、枚举常数和const变量,用大写字母命名。

在复合词里用下划线隔开每个词。

(2)复合词中每个单词的第一个字母大写。

除了规则5.1.1.1以外,避免使用下划线。

(3)类、类型定义和枚举型名的第一个字母大写。

(4)函数名是复合词的,第一个词采用全部小写,随后每个单词采用第一个字母大写,其它字母小写方式;如果是单个词的,采用全部小写方式。

(5)循环变量可采用i,j,k等,不受上述规则限制。

(6)类的成员变量应采用m_开头。

(7)全局变量词头为g_。

(8)临时变量词头为tmp_。

(9)对结构体内的变量命名,遵循变量的具体含义命名原则

(10)用小写字母的前缀表示变量的类型,前缀的下一个字母用大写。

 

表1

词头类型词头类型

chcharllong

iintegeruunsigned 

bbooleanppointer 

ffloatlplongpointer

ddoublesstring

ststructureszASCIIstring

bybytenshortint

Hhandlex,y分别为x,y坐标

dwDWORDfnfunction

表2

词头变量名词头变量名 

tasktasksigsignal

sbbinarysemaphoreswdwatchdog

smmutualexclusion 

semaphorestmtimer

sccountingsemaphoresmsgmessage

pipepipe 

例:

#defineARRAY_SIZE24/*规则5.1.1.1*/

intg_iFlag; 

classMyClass/*规则5.1.1.3*/

{

};

voidsomeFunc()/*规则5.1.1.2和5.1.1.4*/

{

.2.

Q/ECC/BJ010—2001

intnArray[ARRAY_SIZE];

unsignedcharuchByte;

charszName[];

char*pszName=szName;

}

(11)有些词头(如p和u)可以和其它词头组合。

 

例:

WDOG_IDwdId;

WDOG_IDg_wdId;/*全局watchdogId,故以g_开头*/

1.1.2名字的长度一般不要过长或过短。

过长的名字会增加工作量,使程序逻辑流程变得模糊;过短的名字无法表达符号的实际意义。

约定长度范围:

3-31;

1.2数据和函数说明

1.2.1数据说明次序应当规范化,使数据属性容易查找,也有利于测试、排错和维护。

说明的先后次序应固定,应按逻辑功能排序,逻辑功能块内建议采用下列顺序:

整型说明、实型说明、字符说明、逻辑量说明。

1.2.2如果设计了一个复杂的数据结构,应当通过注释对其变量的含义、用途进行说明。

1.2.3在函数的声明中使用异常声明。

如:

voidf()throw(toobig,toosmall,divzero);

在声明一个函数时,将它所抛出的异常列出,便于函数的使用者了解可能会发生哪些异常。

1.3程序注释 

1.3.1程序注释是程序员与日后的程序读者之间通信的重要手段之一,注释分为文件注释、函数注释和功能注释。

1.3.2正规程序的注释应注意:

——注释行的数量占到整个源程序的1/3到1/2。

1.3.3文件注释位于整个源程序的最开始部分,注释后空两行开始程序正文。

它包括:

——程序标题。

——目的、功能说明。

——文件作者、最后修改日期等说明。

例:

./********************************************************************

(空一行)

标题:

Demo.c

功能:

测试VxWorks的各种系统调用. 

说明:

 

该程序测试各种VxWorks的系统调用函数。

包括任务(taks)的创建、挂起及任务间通过信号灯实现同步,通过消息队列进行通讯。

程序创建了两个任务:

一个高优先级的任务和一个低优先级的任务。

两个任务间通过一个二进制的信号灯进行同步,通过消息队列进行通讯。

当前版本:

x.x

修改信息:

2000.06.05John,InitialVersion

2000.07.05Tom,Bugxxxxfixed

**************************************************************/

(空2行,开始程序正文)

1.3.4函数注释通常置于每函数或过程的开头部分,它应当给出函数或过程的整体说明对于理解程序本身具有引导作用。

一般包括如下条目:

——模块标题。

——有关本模块功能和目的的说明。

——调用格式

——接口说明:

包括输入、输出、返回值、异常。

——算法。

如果模块中采用了一些复杂的算法。

例:

file:

//(注释开头应和上一函数空两行)

(注释开头与上一函数最后一行间隔两行)

/********************************************************************

标题:

assignmentComplete

功能:

BSC=>MSC消息生成函数,生成assignment_complete指配完成消息(BSMAP消息).

格式:

intassignmentComplete(intiCellId,intiServiceChannnelNum,char*pszMSGData)throw(exception1,exception2)

输入:

intiCellId:

MS所在的小区识别

iCellId取值:

0x00-——0xff.4.

Q/ECC/BJ010—2001

intiServiceChannnelNum:

MS所占的业务信道号码

输出:

char*pszMSGData:

指配完成消息数据

返回值:

0x00正常

异常:

exception1异常情况1,exception2异常情况2

********************************************************************/

(注释后直接开始程序正文,不空行。

1.3.5功能性注释嵌在源程序体中,用于描述其后的语句或程序段做什么工作,也就是解释下面要做什么,或是执行了下面的语句会怎么样。

而不要解释下面怎么做,因为解释怎么做常常与程序本身是重复的。

例:

/*把amount加到total中*/ 

total=amount+total;

这样的注释仅仅是重复了下面的程序,对于理解它的工作并没有什么作用。

而下面的注释,有助于读者理解。

/*将每月的销售额amount加到年销售额total中*/

total=amount+total;

1.4函数编写应尽可能短小精悍,一般不超过两屏,以便于调试和理解。

1.5语句结构

为保证语句结构的清晰和程序的可读性,在编写软件程序时应注意以下几个方面的问题:

——在一行内只写一条语句,并采用空格、空行和移行保证清楚的视觉效果。

——每一个嵌套的函数块,使用一个TAB缩进(可以设定为4个空格),大括号必须放在条件语句的下一行,单独成一行,便于匹对:

如,有一段程序如下:

for(i=1;i

if(a[j]

=i){work=a[t];a[t]=a[I];a[I]=work;}}}

应写为

for(i=1;i

{

t=1;

for(j=i+1;j

{

if(a[i]

t=j;

if(t!

=1)

{.5. 

Q/ECC/BJ010—2001

work=a[t];

a[t]=a[i];

a[i]=work;

}

}

——文件之中不得存在无规则的空行,比如说连续十个空行。

一般来讲函数与函数之间的空行为2-3行;

在函数体内部,在逻辑上独立的两个函数块可适当空行,一般为1-2行。

——程序编写首先应考虑清晰性,不要刻意追求技巧性而使得程序难以理解。

——每行长度尽量避免超过屏幕宽度,应不超过80个字符。

——除非对效率有特殊要求,编写程序要作到清晰第一,效率第二。

——尽可能使用函数库。

——尽量用公共过程或子程序去代替重复的功能代码段。

要注意,这个代码应具有一个独立的功能,不要只因代码形式一样便将其抽出组成一个公共过程或子程序。

——使用括号清晰地表达算术表达式和逻辑表达式的运算顺序。

如将x=a*b/c*d写成x=(a*b/c)*d可避免阅读者误解为x=(a*b)/(c*d)。

——避免不必要的转移。

——避免采用过于复杂的条件测试。

——避免过多的循环嵌套和条件嵌套。

——建议不要使用*=,^=,/=等运算符。

——一个函数不要超过200行。

一个文件应避免超过2000行。

——尽量避免使用goto语句。

——避免采用多赋值语句,如x=y=z;

——不鼓励采用?

:

操作符,如z=(a>b)?

a:

b;

——不要使用空的ifelse语句。

if(cMychar>=‘A’)

if(cMychar<=‘Z’)

printf(“Thisisaletter\n”);

else

printf(“Thisisnotaletter\n”);

else到底是否定哪个if容易引起误解。

可通过加{}避免误解。

 

——尽量减少使用“否定”条件的条件语句。

如:

把if(!

((cMychar<’0’)||(cMychar>’9’))) 

改为if((cMychar>=’0’)&&(cMychar<=’9’))

C/C++编程规范1.0(2009-03-1819:

31:

51)

标签:

杂谈 

 

规范说明...2

第一部分文件结构...3

第1节头文件(.H)3

第2节定义文件(.CPP/.C)5

第3节文件的组织...6

第二部分排版...7

第1节空行...7

第2节代码行...8

第3节代码行内的空格...9

第4节对齐...10

第5节长行拆分...12

第6节修饰符的位置...12

第7节注释...13

第8节类的版式...14

第三部分命名规则...16

第四部分表达式和基本语句...23

第五部分常量...27

第六部分函数...28

第1节参数...28

第2节返回值...30

第3节函数体...30

第4节成员函数...30

第5节重载、覆盖和隐藏...31

第6节内联...32

第7节其他...33

第七部分内存管理...34

第八部分类...35

第1节构造函数和析构函数...35

第2节拷贝构造函数和赋值函数...36

第3节成员变量...38

第4节成员函数...38

第九部分数据类型...39

规范说明

本规范适用的对象是天晴数码娱乐有限公司程序部从事C++编程工作的员工。

本规范各款“规则”或“建议”标准的制定原则:

兼容公司程序部的历史代码,提高公司程序部的代码的可读性、一致性和健壮性,人的效率优先而不是机器效率优先。

 

本规范中的【规则x-x-x】部分内容为公司强制执行的标准,【建议x-x-x】部分内容为公司推荐的标准。

强制标准:

公司程序部的所有员工编写C++代码不应与该规范的规则标准相抵触,违反规则标准编写的C++代码,由违反者改正。

建议标准:

是一种良好的C++编程风格,由于各种因素公司只推荐使用。

公司程序部员工可以不按照某款建议标准编写C++代码。

 

对本规范的不同意见或建议可通过正式途径提交,公司将在下一版规范中采纳或不采纳提出的意见或建议。

正式途径由程序部行政部们另行建立。

 

第一部分文件结构

第1节头文件(.H)

【规则1-1-1】版权的声明

版权的声明位于头文件和定义文件的开头(参见示例1-1-1),主要内容有:

(1)版权信息。

(2)创建者。

(3)创建日期。

(4)简要描述。

【示例1-1-1】

////////////////////////////////////////////////////////////////////////

//Copyright(c)1999-2006,TQDigitalEntertainment,AllRightsReserved

 //Author:

 WUYongmin

 //Created:

2006/03/20

//Describe:

简要描述本文件的功能

////////////////////////////////////////////////////////////////////////

 

【规则1-1-2】头文件的组成

头文件由三部分内容组成:

(1)头文件开头处的版权声明(参见示例1-1-1)。

(2)预处理块。

(3)函数和类结构声明等。

假设头文件名称为graphics.h,头文件的结构参见示例1-1-2。

【示例1-1-2】

//版权和版本声明见示例1-1,此处省略。

 

#ifndef  _TQ_GRAPHICS_H_//防止graphics.h被重复引用

#define  _TQ_GRAPHICS_H_

 

 #if_MSC_VER>1000

#pragmaonce

#endif//_MSC_VER>1000

 

 

#include        //引用标准库的头文件,必须使用<>

#include“myheader.h”      //引用非标准库的头文件,必须使用""

namespacetq             //命名空间

{

classCBox               //类结构声明

{

};

voidFunction1(…);  //全局函数声明

}

 

#endif //endofdefine_GRAPHICS_H_

 

【规则1-1-3】防止头文件重复应用预处理块

为了防止头文件被重复引用,应当用ifndef/define/endif结构产生预处理块。

【规则1-1-4】标准库的头文件的引用

用#include格式来引用标准库的头文件(编译器将从标准库目录开始搜索)。

【规则1-1-5】非标准库头文件的引用

用#include“filename.h”格式来引用非标准库的头文件(编译器将从用户的工作目录开始搜索)。

【规则1-1-6】不允许使用全局类类型变量

尽量不要在头文件中出现象externCClassNameobj这类声明,以防止全局对象初始化时,多个类对象的构造函数和析购函数的调用顺序混乱。

可用全局函数代替全局类类型变量。

【规则1-1-7】发布的头文件应通过完整性检查

发布的头文件(例如:

header.h),应用如下的test.cpp编译通过,以检查头文件相应的完整性与自包含性。

test.cpp文件的内容如下:

#include"header.h"    //检查头文件的完整性

#include"header.h"    //检查头文件的是否被重复引用

【建议1-1-1】头文件中只存放“声明”而不存放“定义(实现代码)”

在C++语法中,类的成员函数可以在声明的同时被定义,并且自动成为内联函数。

这虽然会带来书写上的方便,但却造成了风格不一致,弊大于利。

建议将成员函数的定义与声明分开,不论该函数体有多么小。

如果想通过内联函数提高代码效率,可在定义文件中相应的成员函数实现代码前加上关键字inline(参见规则6-5-1)。

 

第2节定义文件(.CPP/.C)

【规则1-2-1】定义文件的组成

(1)      定义文件开头处的版权声明(参见示例1-1-1)。

(2)      对一些头文件的引用。

(3)      程序的实现体(包括数据和代码)。

假设定义文件的名称为graphics.cpp,定义文件的结构参见示例1-2-1。

【示例1-2-1】

//版权和版本声明见示例1-1,此处省略。

 

#include“graphics.h”    //引用头文件

//类成员函数的实现体

voidCBox:

:

Draw(…)

{

}

 

//全局函数的实现体

voidFunction1(…)

{

}

 

第3节文件的组织

【规则1-3-1】文件应与类设计相对应

将一个类分解给2个文件存储。

一个是头文件(.h),用于声明类的成员变量和成员函数;另一是定义文件(.cpp/.c),用于类的成员变量的初始化和成员函数的具体实现。

【规则1-3-2】不要将多个类的设计放在同一个“头文件/定义文件”中

接口类不必遵守该规则。

【建议1-3-1】目录结构

需要公开的头文件(如接口)保存于Include目录或Inc,将不需要公开的头文件和定义文件保存于Source目录或Src。

【建议1-3-2】不要将一个类的设计放在一个头文件和多个定义文件

   如果出现定义文件太大,不得不分解为多个定义文件的情况,应考虑类的设计是否恰当。

 

第二部分排版

第1节空行

【规则2-1-1】类声明、函数定义之后空行

在每个类声明之后、每个函数定义结束之后都要加空行。

参见示例2-1-1(a)

【规则2-1-2】函数体内,逻辑中断空行

在一个函数体内,逻揖上密切相关的语句之间不加空行,其它地方应加空行分隔。

参见示例2-1-1(b)

【示例2-1-1】(a-b)

//空行

voidFunction1(…)

{

 …

}

//空行

voidFunction2(…)

{

 …

}

//空行

voidFunction3(…)

{

 …

}

 

 //空行

while(condition)

{

 statement1;

 //空行

 if(condition)

 {

    statement2;

 }

 else

 {

    statement3;

 }

//空行

 statement4;

 

示例2-1-1(a)函数之间的空行                  示例2-1-1(b)函数内部的空行

第2节代码行

【规则2-2-1】if、for、while、do等语句自占一行

执行语句不得紧跟其后。

不论执行语句有多少都要加{}。

这样可以防止书写失误。

 

示例2-2-1(a)为风格良好的代码行,示例2-2-1(b)为风格不良的代码行。

【示例2-2-1】(a-b)

 

intnWidth;  //宽度

intnHeight; //高度

intnDepth;  //深度

 

intnWidth,nHeight,nDepth;//宽度高度深度

 

 

x=a+b;

y=c+d;

z=e+f;

 X=a+b;  y=c+d; z=e+f;

 

 

if(nWidth

{

dosomething();

}

 if(nWidth

 

for(initialization;condition;update)

{

dosomething();

}

//空行

other();

 

 for(initialization;condition;update)

    dosomething();

other();

 

 

 

示例2-2-1(a)风格良好的代码行                示例2-2-1(b)风格不良的代码行

【规则2-2-2】就近原则,变量在使用前才定义

如果变量的引用处和其定义处相隔比较远,变量的初始化很容易被忘记。

如果引用了未被初始化的变量,可能会导致程序错误。

 

【规则2-2-3】变量定义时必须初始化

【示例2-2-2】

intnWidth=10;   //定义并初绐化width

intnHeight=10;  //定义并初绐化height

intnDepth=10;   //定义并初绐化depth

【建议2-2-1】一行代码只做一件事情

如只定义一个变量,或只写一条语句。

这样的代码容易阅读,并且方便于写注释。

 

第3节代码行内的空格

【规则2-3-1

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1