




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、SMISOLCC+代碼編寫規(guī)范Ver1.12001 年 4 月 16 日 1 目的使用編碼編寫規(guī)范的主要原因,是使應(yīng)用程序的結(jié)構(gòu)和編碼風(fēng)格標(biāo)準(zhǔn)化,使其他成員共享勞動(dòng)成果。注重于程序的物理結(jié)構(gòu)和外觀,而不是程序的邏輯結(jié)構(gòu)。它們使其他人的編碼更加容易閱讀、容易理解而且容易。 2命名規(guī)則總則:命名要用英語(yǔ),單詞簡(jiǎn)單,明了,意義明確。每個(gè)單詞的第一個(gè)字母應(yīng)該大寫,單詞與單詞之間直接連接,用大寫字母加以區(qū)別,定語(yǔ)應(yīng)該放在被修飾語(yǔ)的前面.不能放在被修飾語(yǔ)的后面.。函數(shù)名稱和工程名稱杜絕直接使用 A,B,C,1,2,3,漢語(yǔ)拼音或人名等難以理解的單詞,對(duì)于變量名稱也要避免 如此命名。命名書寫的基本原則是匈牙
2、利命名法.復(fù)雜變量 (復(fù)雜變量變量指,類和結(jié)構(gòu)的實(shí)例)應(yīng)該有原則和常用變量的縮寫列表.的縮寫命名的長(zhǎng)度應(yīng)當(dāng)符合“min-length & max-information”原則。一般來說,長(zhǎng)名字能更好地表達(dá)含義。單字符的名字也是有用的,常見的如 i,j,k,m,n,x,y,z 等,它們通??捎米骱瘮?shù)內(nèi)的局部變量 2.1工程命名工程項(xiàng)目的意義名稱根據(jù)項(xiàng)目組決定.并在此工程意義名稱的前面添加大寫的“SS”(ShangHai Smisol )作為此工程項(xiàng)目的工程命名。如:工程項(xiàng)目的意義名稱為 M,工程名稱為 SSM對(duì)應(yīng)的Visual C+的工程文件名為 SSM.dsp 2.2類(CLASS)名所有的類
3、()的名字必須以“CSS“開頭“CSS “后第一個(gè)字母應(yīng)該大寫:)的頭文件和原文件,遵循CSSImage所以對(duì)于類(名規(guī)則去掉字母即可.Exle :SSImage.h,SSImage.cpp 2.3函數(shù)名 2.3.1全局函數(shù)全局函數(shù)如:long Rm名必須符合 :限定名詞 + 動(dòng)詞 +名詞 的原則。GetCenter(double &x, double &y) 的 Rm為限定名詞Get 為動(dòng)詞 Center 為名詞。限定名詞根據(jù)工程名稱規(guī)定。 2.3.2類成員函數(shù)類成員函數(shù)名必須符合:動(dòng)詞+名詞的原則。如:在CRImage class 中 void GetWidth(double *Width
4、) 名詞 Get 為動(dòng)詞 Width為名詞。類的成員函數(shù)只使用“動(dòng)詞”,被省略掉的名詞就是對(duì)象本 身。例如:RmDrawImage();/ 全局函數(shù)/ 類的成員函數(shù)Image-Draw(); 2.4宏全部要用大寫字母。并用下劃線分割單詞。如:#define MAX_IMAGE_LENGTH 1024 2.5文件名 2.5.1頭文件(H),代碼文件(CPP)對(duì)于類(CLASS)的頭文件和代碼文件名遵循名規(guī)則.去掉字母即可。Exle :對(duì)于 CSSImage class 頭文件和代碼文件分別為 SSImage.h,SSImage.cpp.對(duì)于全局函數(shù)的頭文件和代碼文件名詞+其他 + cpp/H。如
5、 SSRm名,應(yīng)該遵循: SS+ 限定Create.h 和SSRmCreate.cpp.其中 SS 為文件名前綴,Rm為限定詞,Create 表明此代碼文件是產(chǎn)生關(guān)于 Rm的文件。 2.5.2資源文件資源文件與工程文件同名,僅僅后綴不同而已。如:對(duì)于 SSM.dsp而言,資源文件名稱為 SSM.rc. 2.5.3def 文件def 文件因該與工程文件同名,僅僅后綴不同而已。如:對(duì)于SSM.dsp 而言,def 文件名稱為 SSM.def. 2.6變量名變量名應(yīng)該遵循匈牙利命名法。即:限定詞 + _ + 類型縮寫+意義名詞。 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靜態(tài)變量靜態(tài)變量加限定詞為”s
7、”,所以對(duì)于類中的成員靜態(tài)變量命名必須以小寫字母” ms_”開始。如ms_nImageNumber :“ms“表示類中成員靜態(tài)變量 “n“表示此變量為義。型 , “ImageNumber“表示此變量的意對(duì)于局部的靜態(tài)變量命名必須以小寫字母” s_”開始。如 s_nImageNumber :“s“表示靜態(tài)變量 “n“表示此變量為 “ImageNumber“表示此變量的意義。型 , 2.6.5指針在所有的指針的類型縮寫前必須加前綴”p”。如對(duì)于類中的成員指針變量必須以小寫字母” m_p”開始。如 示類中成員變量 “pn“表示此變量為此變量的意義。*m_pnImageNumber :“m“表* 型
8、, “ImageNumber“表示 2.6.6常量名常量必須全部用大寫字母,不需要加前綴,當(dāng)常量由多個(gè)單詞組成時(shí),各單詞由“_”加以分割。并且用 const 來定義常量(稱為 const常量)。如:constconst floatMAX_NUMBER = 100;/C+ 語(yǔ)言的 const 常量C+ 語(yǔ)言的 const 常量PI = 3.14159;/需要對(duì)外公開的常量放在頭文件中,不需要對(duì)外公開的常量放在定義文件的頭部。為便于管理,可以把不同工程的常量集中存放在一個(gè)公共的頭文件中。 2.6.7參數(shù)參數(shù)名名和局部變量名相同。即:類型縮寫+意義名詞。如&nImageNumber) : “n“表示
9、此變量為longGetImageNumber(型 , “imageNumber“表示此變量的意義。 2.7其他 2.7.1類型(TYPEDRFED) 命名類型(typedef )如:typedef PWORD或typedef PWORD名不作具體要求。但第一個(gè)字母應(yīng)該用大寫字母。IMGPTR ; / 16 bit image buffoerImgptr; / 16 bit image buffoer 2.7.2枚舉類型的枚舉(enum)名中, 單詞與單詞之間直接連接,用大寫字母加以區(qū)別,并且加大寫的字母”EM”作為前綴。枚舉列表值名必須遵循常量名規(guī)則。全部用大寫字母,當(dāng)由多個(gè)單詞組成時(shí),各單詞
10、由”_”加以分割 如:enum EMClockDirecterCLOCKWISE=1,LOCKWISE=-1; 2.7.3聯(lián)合類型的聯(lián)合(union)名中, 單詞與單詞之間直接連接,用大寫字母加以區(qū)別,并且加大寫的字母”UN”作為前綴。聯(lián)合包含的類型數(shù)據(jù)名必須遵循局部變量union UNKnow名規(guī)則。如:/ Declare union typecharchType; / Declare member types nNumber;fValue;float 2.7.4結(jié)構(gòu)類型的結(jié)構(gòu)(struct)名中, 單詞與單詞之間直接連接,用大寫字母加以區(qū)別,并且加大寫的字母”ST”作為前綴。結(jié)構(gòu)包含的類型
11、數(shù)據(jù)名必須遵循局部變量名規(guī)則。如:struct STnAge; float fWeight;/ Declarestruct type/ Declare member types 3注釋規(guī)則使用代碼注釋的目的:用文字說碼的作用(即為什么要編寫該代碼,而不是如何編寫);明確該代碼的編寫思路和邏輯方法;使人們注意到代碼中的重要轉(zhuǎn)折點(diǎn);使代碼的閱讀者不必在他們的頭腦中仿真運(yùn)行代碼的執(zhí)行過程。空行和空白字符也是一種特殊注釋注釋可以與語(yǔ)句在同一行,也可以在上行,在下面注釋。規(guī)定在所有的注釋中都以/開始,/*和*/之間的代碼僅表示此段代碼暫時(shí)且不用。在注釋中所有的標(biāo)示符都必須用窄字符。 注解的兩種方式:簡(jiǎn)單
12、的說明,必須與代碼同一行或上行,用“/“開始。如if(value0)/if value greatern 0. execute 詳細(xì)的說明,必須在代碼上方,用“/Description: “標(biāo)示開始進(jìn)行說明,用“/Description “標(biāo)示結(jié)束。如:/Description:/if value greater/Descriptionif(value0)n 0. execute 3.1工程的注釋工程的注解說明應(yīng)該書寫入工程的說明文檔。應(yīng)該包括:項(xiàng)目的委托、開發(fā)部門;該系統(tǒng)與其他系統(tǒng)的關(guān)系。定義列出用到的專門術(shù)語(yǔ)的定義和縮寫詞 3.2代碼文件注釋代碼文件主要是指 h 文件和 cpp 文件。每個(gè)
13、代碼文件賦予一個(gè)注釋標(biāo)頭。代碼文件注釋標(biāo)頭內(nèi)容包括:公司名稱、注意一個(gè) CPP 必須有一個(gè)人來完成。請(qǐng)按照下例寫注釋標(biāo)頭:、作者名稱、時(shí)間。/*/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類的注釋類的說明注釋應(yīng)該放在頭文件中
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函數(shù)注釋函數(shù)的簡(jiǎn)單說明應(yīng)該放在頭文件中,詳細(xì)的說明請(qǐng)放在 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 文件中函數(shù)的注釋的模板為:/*/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流程注釋按需要進(jìn)行注釋。特別是在主要的判斷和循環(huán)處加注釋,簡(jiǎn)單的流程注釋要在“和“的同一行進(jìn)行說明。復(fù)雜的的流程注釋要在判斷和循環(huán)的上方增加注釋。如: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變量變量的注釋根據(jù)需要在同一行加以說明。如:nImageNumber /explahe number of image 3.7常量簡(jiǎn)單注釋同變量的注釋。如果
21、需要同時(shí)要有 16 進(jìn)制和 10 進(jìn)制的值constCOLORNUMBER =255/0 xFF.或constCOLORNUMBER =255/0 xFF. 4 代碼的格式化基本要求:在 60 行以程序結(jié)構(gòu)清析,簡(jiǎn)單易懂,單個(gè)函數(shù)的程序行數(shù)內(nèi)。不要隨意定義全局變量,盡量使用局部變量。循環(huán)、分支層次不要超過五層。用 IF 語(yǔ)句來強(qiáng)調(diào)只執(zhí)行兩組語(yǔ)句中的一組。禁止 ELSE GOTO 和 ELSE RETURN。用 CASE 實(shí)現(xiàn)多路分支。函數(shù)只有一個(gè)出口。 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/良好的風(fēng)格pstSrc = 0/不良的風(fēng)格盡可能在定義變量的同時(shí)初始化該變量(就近原則)如果變量的處和其定義處相隔比較遠(yuǎn),變量的初始化很容易被忘記。如果 未被初始化的變量,可能會(huì)導(dǎo)致程序錯(cuò)誤。如了iwidth = 10;iheight = 10;ide
25、pth = 10;/ 定義并初紿化 width/ 定義并初紿化 height/ 定義并初紿化 depth 4.3對(duì)齊方式所有的對(duì)齊都用 TAB 進(jìn)行對(duì)齊(TAB =4 個(gè)空格)如: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括號(hào)“”,“對(duì)齊方式 4.3.2程序的分界符和應(yīng)獨(dú)占一行并且位于同一列,同時(shí)與它們的語(yǔ)句左對(duì)齊。 之內(nèi)的代碼塊在右邊一個(gè) TAB 處左對(duì)齊。如:for(;)/良好的風(fēng)格for(;)/不良的風(fēng)格 4.3.3循環(huán)對(duì)齊方式循環(huán)體必須另起一行, for、while、do 等語(yǔ)句自占一行,執(zhí)行語(yǔ)句不得緊跟其后。建議不論執(zhí)行語(yǔ)句有多少都要加。for(;)/okdosomething();/良好的風(fēng)格/okdosomething();/不良的風(fēng)格for(;) 4
27、.3.4if 對(duì)齊方式if 語(yǔ)句占一行,執(zhí)行語(yǔ)句不得緊跟其后。不論執(zhí)行語(yǔ)句有多少都要加.并且 if 要和其后的程序體的”“,“和“else“在同一列。如:if()elseif()else 4.4關(guān)于 GoTo 的使用盡量避免 GoTo 的使用,雖然使用 GoTo 可以帶來程序結(jié)構(gòu)等許多方面的好處。但它也帶來許多性的。而且這些錯(cuò)誤都是很難查出來的。在必須使用 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空行空行起著分隔程序段落的作用??招械皿w將使程序的布局更加清晰。在每個(gè)類/ 空行之后、每個(gè)函數(shù)定義結(jié)束之后都要加空行 如:void Function1()/ 空行void Function2()/ 空行void Function3()在一個(gè)函數(shù)體內(nèi),邏揖上密切相關(guān)的語(yǔ)句之間不加空行,其它地方應(yīng)加空行分隔。如:/ 空行while (condition)sement1;/ if空行(condition)sement2;elsesement3;/ 空行sement4; 4.6空格關(guān)鍵字之后要留空格。象 const、virtual、inline、case 等關(guān)
29、鍵字之后至少要留一個(gè)空格,否則無法辨析關(guān)鍵字。象 if、for、while 等關(guān)鍵字之后應(yīng)留一個(gè)空格再跟左括號(hào)(,以突出關(guān)鍵字。函數(shù)名之后不要留空格,緊跟左括號(hào)(,以與關(guān)鍵字區(qū)別。(向后緊跟,)、,、;向前緊跟,緊跟處不留空格。,之后要留空格,如 Function(x, y, z)。如果;不是一行的結(jié)束符號(hào),其后要留空格,如 for (initialization; condition; update)。賦值操作符、比較操作符、算術(shù)操作符、邏輯操作符、位域操作符,如“=”、“+=” “=”、“=”、“+”、“*”、“%”、“&”、 “|”、“”這類操作符前后不加空格。對(duì)于表達(dá)式比較長(zhǎng)的 for
30、 語(yǔ)句和 if 語(yǔ)句,為了緊湊起見可以適當(dāng)?shù)厝サ粢恍┛崭?,?for (i=0; i10; i+)和 if (a=b) & (c= 2000)if(year=2000)/if (a=b) & (c=b&c=d)/不良的風(fēng)格良好的風(fēng)格switch (Value)/switch(Value)/不良的風(fēng)格while (Value)/良好的風(fēng)格不良的風(fēng)格while(Value)/for (i=0; i10;i+)/良好的風(fēng)格for(i=0;i10;i+)/ 不良的風(fēng)格/ 過多的空格for (i = 0;I10;i+)x = a b ?a:b;/良好的風(fēng)格x=aFunction();/b - Function(); 4.7其他 4.7.1長(zhǎng)行拆分代碼行最大長(zhǎng)度宜控制在 70 至 80 個(gè)字符以內(nèi)。表達(dá)式要在低優(yōu)先級(jí)操作符處拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年野營(yíng)炊具項(xiàng)目可行性研究報(bào)告
- 2025年觸倒30%乳油項(xiàng)目可行性研究報(bào)告
- 2025年縫紉機(jī)拉筒項(xiàng)目可行性研究報(bào)告
- 2025年空壓機(jī)電磁閥項(xiàng)目可行性研究報(bào)告
- 2025年甲蟲電子變壓器項(xiàng)目可行性研究報(bào)告
- 綠色智能科技園區(qū)建設(shè)可行性研究報(bào)告
- 2025年汽車防盜系統(tǒng)項(xiàng)目可行性研究報(bào)告
- 某年度珠江帝景營(yíng)銷推廣方案
- 2025公司級(jí)安全培訓(xùn)考試試題A卷
- 2025年推式隔離柱項(xiàng)目可行性研究報(bào)告
- 第四章通道內(nèi)非耦合層流的
- 供水管網(wǎng)施工組織設(shè)計(jì)
- 最全的冷軋知識(shí)材質(zhì)牌號(hào)分類及生產(chǎn)工藝
- 易制毒、易制爆化學(xué)品安全培訓(xùn)
- 異面直線所成的角與求法
- 信息安全風(fēng)險(xiǎn)評(píng)估培訓(xùn)(課堂PPT)
- 氣化風(fēng)機(jī)檢修工藝規(guī)程
- 美女金喜善寫真集
- 大學(xué)物理平面電磁波ppt課件
- 八年級(jí)下寫字課
- 前列腺癌臨床路徑(最全版)
評(píng)論
0/150
提交評(píng)論