版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、SMISOLCC+代码编写规范Ver1.12001 年 4 月 16 日 1 目的使用编码编写规范的主要原因,是使应用程序的结构和编码风格标准化,使其他成员共享劳动成果。注重于程序的物理结构和外观,而不是程序的逻辑结构。它们使其他人的编码更加容易阅读、容易理解而且容易。 2命名规则总则:命名要用英语,单词简单,明了,意义明确。每个单词的第一个字母应该大写,单词与单词之间直接连接,用大写字母加以区别,定语应该放在被修饰语的前面.不能放在被修饰语的后面.。函数名称和工程名称杜绝直接使用 A,B,C,1,2,3,汉语拼音或人名等难以理解的单词,对于变量名称也要避免 如此命名。命名书写的基本原则是匈牙
2、利命名法.复杂变量 (复杂变量变量指,类和结构的实例)应该有原则和常用变量的缩写列表.的缩写命名的长度应当符合“min-length & max-information”原则。一般来说,长名字能更好地表达含义。单字符的名字也是有用的,常见的如 i,j,k,m,n,x,y,z 等,它们通常可用作函数内的局部变量 2.1工程命名工程项目的意义名称根据项目组决定.并在此工程意义名称的前面添加大写的“SS”(ShangHai Smisol )作为此工程项目的工程命名。如:工程项目的意义名称为 M,工程名称为 SSM对应的Visual C+的工程文件名为 SSM.dsp 2.2类(CLASS)名所有的类
3、()的名字必须以“CSS“开头“CSS “后第一个字母应该大写:)的头文件和原文件,遵循CSSImage所以对于类(名规则去掉字母即可.Exle :SSImage.h,SSImage.cpp 2.3函数名 2.3.1全局函数全局函数如:long Rm名必须符合 :限定名词 + 动词 +名词 的原则。GetCenter(double &x, double &y) 的 Rm为限定名词Get 为动词 Center 为名词。限定名词根据工程名称规定。 2.3.2类成员函数类成员函数名必须符合:动词+名词的原则。如:在CRImage class 中 void GetWidth(double *Width
4、) 名词 Get 为动词 Width为名词。类的成员函数只使用“动词”,被省略掉的名词就是对象本 身。例如:RmDrawImage();/ 全局函数/ 类的成员函数Image-Draw(); 2.4宏全部要用大写字母。并用下划线分割单词。如:#define MAX_IMAGE_LENGTH 1024 2.5文件名 2.5.1头文件(H),代码文件(CPP)对于类(CLASS)的头文件和代码文件名遵循名规则.去掉字母即可。Exle :对于 CSSImage class 头文件和代码文件分别为 SSImage.h,SSImage.cpp.对于全局函数的头文件和代码文件名词+其他 + cpp/H。如
5、 SSRm名,应该遵循: SS+ 限定Create.h 和SSRmCreate.cpp.其中 SS 为文件名前缀,Rm为限定词,Create 表明此代码文件是产生关于 Rm的文件。 2.5.2资源文件资源文件与工程文件同名,仅仅后缀不同而已。如:对于 SSM.dsp而言,资源文件名称为 SSM.rc. 2.5.3def 文件def 文件因该与工程文件同名,仅仅后缀不同而已。如:对于SSM.dsp 而言,def 文件名称为 SSM.def. 2.6变量名变量名应该遵循匈牙利命名法。即:限定词 + _ + 类型缩写+意义名词。 2.6.1全局变量名全局变量的限定词为字母”g”。所以全局变量必须以小
6、写字母”g_”开g_nImageNumber :“g“表示全局变量“n“表示此变量为始。如型 , “ImageNumber“表示此变量的意义。 2.6.2局部变量名局部变量不必要加限定词。即:类型缩写+意义名词。如nImageNumber : “n“表示此变量为变量的意义。型 , “ImageNumber“表示此 2.6.3类中的成员变量名类中的成员变量命名的限定词为字母”m”。所以类中的成员变量命名必须以小写字母” m_”开始。如m_nImageNumber :“m“表示类中变量 “n“表示此变量为型 , “ImageNumber“表示此变量的意义。 2.6.4静态变量静态变量加限定词为”s
7、”,所以对于类中的成员静态变量命名必须以小写字母” ms_”开始。如ms_nImageNumber :“ms“表示类中成员静态变量 “n“表示此变量为义。型 , “ImageNumber“表示此变量的意对于局部的静态变量命名必须以小写字母” s_”开始。如 s_nImageNumber :“s“表示静态变量 “n“表示此变量为 “ImageNumber“表示此变量的意义。型 , 2.6.5指针在所有的指针的类型缩写前必须加前缀”p”。如对于类中的成员指针变量必须以小写字母” m_p”开始。如 示类中成员变量 “pn“表示此变量为此变量的意义。*m_pnImageNumber :“m“表* 型
8、, “ImageNumber“表示 2.6.6常量名常量必须全部用大写字母,不需要加前缀,当常量由多个单词组成时,各单词由“_”加以分割。并且用 const 来定义常量(称为 const常量)。如:constconst floatMAX_NUMBER = 100;/C+ 语言的 const 常量C+ 语言的 const 常量PI = 3.14159;/需要对外公开的常量放在头文件中,不需要对外公开的常量放在定义文件的头部。为便于管理,可以把不同工程的常量集中存放在一个公共的头文件中。 2.6.7参数参数名名和局部变量名相同。即:类型缩写+意义名词。如&nImageNumber) : “n“表示
9、此变量为longGetImageNumber(型 , “imageNumber“表示此变量的意义。 2.7其他 2.7.1类型(TYPEDRFED) 命名类型(typedef )如:typedef PWORD或typedef PWORD名不作具体要求。但第一个字母应该用大写字母。IMGPTR ; / 16 bit image buffoerImgptr; / 16 bit image buffoer 2.7.2枚举类型的枚举(enum)名中, 单词与单词之间直接连接,用大写字母加以区别,并且加大写的字母”EM”作为前缀。枚举列表值名必须遵循常量名规则。全部用大写字母,当由多个单词组成时,各单词
10、由”_”加以分割 如:enum EMClockDirecterCLOCKWISE=1,LOCKWISE=-1; 2.7.3联合类型的联合(union)名中, 单词与单词之间直接连接,用大写字母加以区别,并且加大写的字母”UN”作为前缀。联合包含的类型数据名必须遵循局部变量union UNKnow名规则。如:/ Declare union typecharchType; / Declare member types nNumber;fValue;float 2.7.4结构类型的结构(struct)名中, 单词与单词之间直接连接,用大写字母加以区别,并且加大写的字母”ST”作为前缀。结构包含的类型
11、数据名必须遵循局部变量名规则。如:struct STnAge; float fWeight;/ Declarestruct type/ Declare member types 3注释规则使用代码注释的目的:用文字说码的作用(即为什么要编写该代码,而不是如何编写);明确该代码的编写思路和逻辑方法;使人们注意到代码中的重要转折点;使代码的阅读者不必在他们的头脑中仿真运行代码的执行过程。空行和空白字符也是一种特殊注释注释可以与语句在同一行,也可以在上行,在下面注释。规定在所有的注释中都以/开始,/*和*/之间的代码仅表示此段代码暂时且不用。在注释中所有的标示符都必须用窄字符。 注解的两种方式:简单
12、的说明,必须与代码同一行或上行,用“/“开始。如if(value0)/if value greatern 0. execute 详细的说明,必须在代码上方,用“/Description: “标示开始进行说明,用“/Description “标示结束。如:/Description:/if value greater/Descriptionif(value0)n 0. execute 3.1工程的注释工程的注解说明应该书写入工程的说明文档。应该包括:项目的委托、开发部门;该系统与其他系统的关系。定义列出用到的专门术语的定义和缩写词 3.2代码文件注释代码文件主要是指 h 文件和 cpp 文件。每个
13、代码文件赋予一个注释标头。代码文件注释标头内容包括:公司名称、注意一个 CPP 必须有一个人来完成。请按照下例写注释标头:、作者名称、时间。/*/File Name: RAngle.h: theerface of CRAngle/ver: V1.0/Copyright: (c) 1998-1999 *公司技?部/Designer : */Creater: : */Begin Date: 2001.10.9/End Date: 2001.11.9/*Modify*/Modfier: /修改人:/Modfy Date:/Modfy Context:/* 3.3类的注释类的说明注释应该放在头文件中
14、(H 文件中.CPP 文件中无)类注释的模板为:/Description:/This class implement/CSSImage is the base/image pros. Every/class. do not createthe base funciton of image.class of Smiosl Image Group aboutclass when use image please use the new Image/base class . but you can inherit one new class from/CSSImage.This class have
15、 CSSmemory member . so the class/can auto manage memory/Description/Exle:/CSImage imgName;/ImgName.SetImage(nwidth,nHeight,impBuffer,true);/IMGPTR imBuffer = ImgName.GetAddress();/Exleclass CSSImagepublic:friend class CSSImage;CSSImage();/ Construct one empty image/Description:/Construct one image a
16、s same as cIimage,but dontallocate as same/new image buffer.t means the image buffer is/as the buffer of cImage/DescriptionCSSImage(const CSSImage &cImage);virtual CSSImage(); public:/Description :/Get the bits depthof the gray image./ the default value is 8;/Descriptionsize_t GetBits() const;voidSe
17、tBits(size_t uBits);size_t GetHeight()const; / the height of image 3.4函数注释函数的简单说明应该放在头文件中,详细的说明请放在 CPP 文件中。在 H 文件中的注释的模板为:/Description :/Get the bits depth of the gray image. the default value/is 8;/Descriptionsize_t GetBits() const;或/Get the bits defpthsize_t GetBits() const;在 CPP 文件中函数的注释的模板为:/*/F
18、unction Name:/Parameter in/Parameter out/Parameter in,out/Description:/Return Value:a-b-c-/Ex为 1, 表示.为 0, 表示.le: Demo about the function/* 3.5流程注释按需要进行注释。特别是在主要的判断和循环处加注释,简单的流程注释要在“和“的同一行进行说明。复杂的的流程注释要在判断和循环的上方增加注释。如:voiImage:SetImage(const CSImage &imgSrc, bool bCopy)/assert this image != imgSrc as
19、sert(this!=& imgSrc);/assert the data mermber of class is #ifdef _DEBUGimgSrc.Assert(); #endifvalidouWidth ouHeight ouBits ouLineSize= imgSrc.ouWidth;= imgSrc.ouHeight;= imgSrc.ouBits;= imgSrc.ouLineSize;if(bCopy)/allocate memory if bCopy =true/*Description : allocate the require size memory and fre
20、e the before memory */MemAllocator(ouLineSize*ouHeight); CopyImage(imgSrc);else/ only poer imgSrc if bCopy = falseoImp= imgSrc.oImp;/ assert the creation validimage data mermber of class is#ifdef _DEBUGAssert(); #endif 3.6变量变量的注释根据需要在同一行加以说明。如:nImageNumber /explahe number of image 3.7常量简单注释同变量的注释。如果
21、需要同时要有 16 进制和 10 进制的值constCOLORNUMBER =255/0 xFF.或constCOLORNUMBER =255/0 xFF. 4 代码的格式化基本要求:在 60 行以程序结构清析,简单易懂,单个函数的程序行数内。不要随意定义全局变量,尽量使用局部变量。循环、分支层次不要超过五层。用 IF 语句来强调只执行两组语句中的一组。禁止 ELSE GOTO 和 ELSE RETURN。用 CASE 实现多路分支。函数只有一个出口。 4.1Public:CLASS 的书写顺序Type Define 类型定义Public:Constructor FunctionDestroy
22、 Function Public:4.Property or Data Member Public:5.6.7.SetParalmeter Method Execute Method GetPalameter MehodProtected:Type Define 类型定义Protected:Data Member Protected:Method Privated:Type Define 类型定义Privated:Data Member Privated:Method如:class CSImagepublic:friend class CSImage;typedef PWORD IMGPTR
23、; / 16 bit image buff CSImage();virtual CSImage();public:oer declspec(property(get=GetWidth)size_t Width;public:void SetWidth(size_t uWidth); long Execute();size_t GetWidth() const; protected:typedef struct tagPROSIMGPTR ImpDest;size_t uDestLineSize; size_t uWidth;size_t uHeight; S;PROprotected:size
24、_t size_tprotected:virtualouWidth;/image width ouHeight;/image heightlongRun(const PROS &cPros);private:void SetDefault(); 4.2变量的初始化所有变量必需初始化.尤其是指针必须初始化为 NULL. pstSrc = NULL/良好的风格pstSrc = 0/不良的风格尽可能在定义变量的同时初始化该变量(就近原则)如果变量的处和其定义处相隔比较远,变量的初始化很容易被忘记。如果 未被初始化的变量,可能会导致程序错误。如了iwidth = 10;iheight = 10;ide
25、pth = 10;/ 定义并初绐化 width/ 定义并初绐化 height/ 定义并初绐化 depth 4.3对齐方式所有的对齐都用 TAB 进行对齐(TAB =4 个空格)如:while()if()for()switch()case 1: / switch() / for() / if() / while() 4.3.1条件编译宏所有的条件编译宏都必须靠最左边。如:voiImage:SetImage(const CSImage &imgSrc,bool bCopy)/assert this image != imgSrc assert(this!=& imgSrc);/assert the
26、 data mermber of class isvalidif(bCopy)#ifdef _DEBUGimgSrc.Assert();#endif括号“”,“对齐方式 4.3.2程序的分界符和应独占一行并且位于同一列,同时与它们的语句左对齐。 之内的代码块在右边一个 TAB 处左对齐。如:for(;)/良好的风格for(;)/不良的风格 4.3.3循环对齐方式循环体必须另起一行, for、while、do 等语句自占一行,执行语句不得紧跟其后。建议不论执行语句有多少都要加。for(;)/okdosomething();/良好的风格/okdosomething();/不良的风格for(;) 4
27、.3.4if 对齐方式if 语句占一行,执行语句不得紧跟其后。不论执行语句有多少都要加.并且 if 要和其后的程序体的”“,“和“else“在同一列。如:if()elseif()else 4.4关于 GoTo 的使用尽量避免 GoTo 的使用,虽然使用 GoTo 可以带来程序结构等许多方面的好处。但它也带来许多性的。而且这些错误都是很难查出来的。在必须使用 GoTo 的情况下,尽量使用 do . while(false)代替。如:do FILE *fp = fopen(f:temptry1.rfi, wb); if (fp = NULL) break;dosomething();if()bre
28、ak;while (false); 4.5空行空行起着分隔程序段落的作用。空行得体将使程序的布局更加清晰。在每个类/ 空行之后、每个函数定义结束之后都要加空行 如:void Function1()/ 空行void Function2()/ 空行void Function3()在一个函数体内,逻揖上密切相关的语句之间不加空行,其它地方应加空行分隔。如:/ 空行while (condition)sement1;/ if空行(condition)sement2;elsesement3;/ 空行sement4; 4.6空格关键字之后要留空格。象 const、virtual、inline、case 等关
29、键字之后至少要留一个空格,否则无法辨析关键字。象 if、for、while 等关键字之后应留一个空格再跟左括号(,以突出关键字。函数名之后不要留空格,紧跟左括号(,以与关键字区别。(向后紧跟,)、,、;向前紧跟,紧跟处不留空格。,之后要留空格,如 Function(x, y, z)。如果;不是一行的结束符号,其后要留空格,如 for (initialization; condition; update)。赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符,如“=”、“+=” “=”、“=”、“+”、“*”、“%”、“&”、 “|”、“”这类操作符前后不加空格。对于表达式比较长的 for
30、 语句和 if 语句,为了紧凑起见可以适当地去掉一些空格,如 for (i=0; i10; i+)和 if (a=b) & (c= 2000)if(year=2000)/if (a=b) & (c=b&c=d)/不良的风格良好的风格switch (Value)/switch(Value)/不良的风格while (Value)/良好的风格不良的风格while(Value)/for (i=0; i10;i+)/良好的风格for(i=0;i10;i+)/ 不良的风格/ 过多的空格for (i = 0;I10;i+)x = a b ?a:b;/良好的风格x=aFunction();/b - Function(); 4.7其他 4.7.1长行拆分代码行最大长度宜控制在 70 至 80 个字符以内。表达式要在低优先级操作符处拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 船舶起重工岗中安全规程考核试卷含答案
- 电容器制造工岗前安全实操考核试卷含答案
- 护理安全警示教育
- 道路客运售票员岗位安全意识考核试卷含答案
- 静电成像显影材料载体制造工安全培训强化考核试卷含答案
- 甲醇制烯烃操作工风险评估知识考核试卷含答案
- 中药丸剂工操作规程知识考核试卷含答案
- 2026年秋新教材七年级数学上册有理数的实际应用问题重难点题型(解析版)
- 儿童急性中毒护理预防
- 水质在线监测平台搭建分析方案
- 《先兆流产中西医结合诊疗指南》
- UL2034标准中文版-2017一氧化碳报警器UL中文版标准
- AIGC提示词美学定义
- 高中新生入学开学第一课班会课件
- JT∕T 1496-2024 公路隧道施工门禁系统技术要求
- 《高二开学第一课》主题班会课件
- 2020风电场设备事故现场处置方案
- 自考《兽医法规14239》考试复习题库(必备版)
- 《中华民族大团结》(初中)第1课-爱我中华教学课件
- 2021废(污)水处理用复合碳源
- 化学(基础模块)中职PPT完整全套教学课件
评论
0/150
提交评论