vc 中C 语言命名规范(转)
一、程序風格:????
????1、嚴格采用階梯層次組織程序代碼:????
????各層次縮進的分格采用VC的缺省風格,即每層次縮進為4格,括號位于下一行。要求相匹配的大括號在同一列,對繼行則要求再縮進4格。例如:????
????2、提示信息字符串的位置????
????在程序中需要給出的提示字符串,為了支持多種語言的開發,除了一些給調試用的臨時信息外,其他所有的提示信息必須定義在資源中。????
????3、對變量的定義,盡量位于函數的開始位置。????
二、命名規則:????
????1、變量名的命名規則????
????①、變量的命名規則要求用“匈牙利法則”。即開頭字母用變量的類型,其余部分用變量的英文意思或其英文意思的縮寫,盡量避免用中文的拼音,要求單詞的第一個字母應大寫。????
????即:????變量名=變量類型+變量的英文意思(或縮寫)????
????對非通用的變量,在定義時加入注釋說明,變量定義盡量可能放在函數的開始處。????
????見下表:????
????bool(BOOL)????用b開頭????bIsParent????
????byte(BYTE)????用by開頭????byFlag????
????short(int)????用n開頭????nStepCount????
????long(LONG)????用l開頭????lSum????
????char(CHAR)????用c開頭????cCount????
????float(FLOAT)????用f開頭????fAvg????
????double(DOUBLE)????用d開頭????dDeta????
????void(VOID)????用v開頭????vVariant????
????unsigned????int(WORD)????用w開頭????wCount????
????unsigned????long(DWORD)????用dw開頭????dwBroad????
????HANDLE(HINSTANCE)????用h開頭????hHandle????
????DWORD????用dw開頭????dwWord????
????LPCSTR(LPCTSTR)????用str開頭????strString????
????用0結尾的字符串????用sz開頭????szFileName????
????
????對未給出的變量類型要求提出并給出命名建議給技術委員會。????
????
????②、指針變量命名的基本原則為:????
????對一重指針變量的基本原則為:????
????“p”+變量類型前綴+命名????
????如一個float*型應該表示為pfStat????
????對多重指針變量的基本規則為:????
????二重指針:????“pp”+變量類型前綴+命名????
????三重指針:????“ppp”+變量類型前綴+命名????
????......????
????③、全局變量用g_開頭,如一個全局的長型變量定義為g_lFailCount,即:變量名=g_+變量類型+變量的英文意思(或縮寫)????
????④、靜態變量用s_開頭,如一個靜態的指針變量定義為s_plPerv_Inst,即:????變量名=s_+變量類型+變量的英文意思(或縮寫)????
????⑤、成員變量用m_開頭,如一個長型成員變量定義為m_lCount;即:變量名=m_+變量類型+變量的英文意思(或縮寫)????
????⑥、對枚舉類型(enum)中的變量,要求用枚舉變量或其縮寫做前綴。并且要求用大寫。????
????如:enum????cmEMDAYS????
????{????
????EMDAYS_MONDAY;????
????EMDAYS_TUESDAY;????
????……????
????};????
????⑦、對struct、union、class變量的命名要求定義的類型用大寫。并要加上前綴,其內部變量的命名規則與變量命名規則一致。????
????結構一般用S開頭????
????如:struct????ScmNPoint????
????{????
????int????nX;//點的X位置????
????int????nY;????//點的Y位置????
????};????
????聯合體一般用U開頭????
????如:????union????UcmLPoint????
????{????
????long????lX;????
????long????lY;????
????}????
????類一般用C開頭????
????如:????
????class????CcmFPoint????
????{????
????public:????
????float????fPoint;????
????};????
????對一般的結構應該定義為類模板,為以后的擴展性考慮????
????如:????
????template????
????class????CcmTVector3d????
????{????
????public:????
????TYPE????x,y,z;????
????};????
????⑧、對常量(包括錯誤的編碼)命名,要求常量名用大寫,常量名用英文表達其意思。????
????如:#define????CM_FILE_NOT_FOUND????CMMAKEHR(0X20B)????其中CM表示類別。????
????⑨、對const????的變量要求在變量的命名規則前加入c_,即:c_+變量命名規則;例如:????
????const????char*????c_szFileName;????
????2、????函數的命名規范:????
????函數的命名應該盡量用英文表達出函數完成的功能。遵循動賓結構的命名法則,函數名中動詞在前,并在命名前加入函數的前綴,函數名的長度不得少于8個字母。????
????例如:????
????long????cmGetDeviceCount(……);????
????3、函數參數規范:????
????①、????參數名稱的命名參照變量命名規范。????
????②、????為了提高程序的運行效率,減少參數占用的堆棧,傳遞大結構的參數,一律采用指針或引用方式傳遞。????
????③、????為了便于其他程序員識別某個指針參數是入口參數還是出口參數,同時便于編譯器檢查錯誤,應該在入口參數前加入const標志。如:????
????……cmCopyString(const????char????*????c_szSource,????char????*????szDest)????
????4、引出函數規范:????
????對于從動態庫引出作為二次開發函數公開的函數,為了能與其他函數以及Windows的函數區分,采用類別前綴+基本命名規則的方法命名。例如:在對動態庫中引出的一個圖象編輯的函數定義為????imgFunctionname(其中img為image縮寫)。????
????現給出三種庫的命名前綴:????
????①、????對通用函數庫,采用cm為前綴。????
????②、????對三維函數庫,采用vr為前綴。????
????③、????對圖象函數庫,采用img為前綴。????
????對宏定義,結果代碼用同樣的前綴。????
????5、文件名(包括動態庫、組件、控件、工程文件等)的命名規范:????
????文件名的命名要求表達出文件的內容,要求文件名的長度不得少于5個字母,嚴禁使用象file1,myfile之類的文件名。????
三、注釋規范:????
????1、函數頭的注釋????
????對于函數,應該從“功能”,“參數”,“返回值”、“主要思路”、“調用方法”、“日期”六個方面用如下格式注釋:????
????//程序說明開始????
????//================================================================//????
????//????功能:????從一個String????中刪除另一個String。????
????//????參數:????strByDelete,strToDelete????
????//????(入口)????strByDelete:????被刪除的字符串(原來的字符串)????
????//????(出口)????strToDelete:????要從上個字符串中刪除的字符串。????
????//????返回:????找到并刪除返回1,否則返回0。(對返回值有錯誤編碼的要//????求列出錯誤編碼)。????
????//????主要思路:本算法主要采用循環比較的方法來從strByDelete中找到????
????//????與strToDelete相匹配的字符串,對多匹配strByDelete????
????//????中有多個strToDelete子串)的情況沒有處理。請參閱:????
????//????書名......????
????//????調用方法:......????
????//????日期:起始日期,如:2000/8/21.9:40--2000/8/23.21:45????
????//================================================================//????
????函數名(……)????
????//程序說明結束????
????①、????對于某些函數,其部分參數為傳入值,而部分參數為傳出值,所以對參數要詳細說明該參數是入口參數,還是出口參數,對于某些意義不明確的參數還要做詳細說明(例如:以角度作為參數時,要說明該角度參數是以弧度(PI),還是以度為單位),對既是入口又是出口的變量應該在入口和出口處同時標明。等等。????
????②、????函數的注釋應該放置在函數的頭文件中,在實現文件中的該函數的實現部分應該同時放置該注釋。????
????③、????在注釋中應該詳細說明函數的主要實現思路、特別要注明自己的一些想法,如果有必要則應該寫明對想法產生的來由。對一些模仿的函數應該注釋上函數的出處。????
????④、????在注釋中詳細注明函數的適當調用方法,對于返回值的處理方法等。在注釋中要強調調用時的危險方面,可能出錯的地方。????
????⑤、????對日期的注釋要求記錄從開始寫函數到結束函數的測試之間的日期。????
????⑥、????對函數注釋開始到函數命名之間應該有一組用來標識的特殊字符串。????
????如果算法比較復雜,或算法中的變量定義與位置有關,則要求對變量的定義進行圖解。對難以理解的算法能圖解盡量圖解。????
????2、變量的注釋:????
????對于變量的注釋緊跟在變量的后面說明變量的作用。原則上對于每個變量應該注釋,但對于意義非常明顯的變量,如:i,j等循環變量可以不注釋。????
????例如:????long????lLineCount????//線的根數。????
???? 3、文件的注釋:????
????文件應該在文件開頭加入以下注釋:????
????/????
????//????工程:????文件所在的項目名。????
????//????作者:**,修改者:**????
????//????描述:說明文件的功能。????
????//????主要函數:…………????
????//????版本:????說明文件的版本,完成日期。????
????//????修改:????說明對文件的修改內容、修改原因以及修改日期。????
????//????參考文獻:????......????
????/????
????為了頭文件被重復包含要求對頭文件進行定義如下:????
????#ifndef????__FILENAME_H__????
????#define????__FILENAME_H__????
????其中FILENAME為頭文件的名字。????
???? 4、其他注釋:????
????在函數內我們不需要注釋每一行語句。但必須在各功能模塊的每一主要部分之前添加塊注釋,注釋每一組語句,在循環、流程的各分支等,盡可能多加以注釋。????
????其中的循環、條件、選擇等位置必須注釋。????
????對于前后順序不能顛倒的情況,建議在注釋中增加序號。????
????例如:????
????在其他順序執行的程序中,每隔3—5行語句,必須加一個注釋,注明這一段語句所組成的小模塊的作用。對于自己的一些比較獨特的思想要求在注釋中標明。????
四、程序健壯性:????
????1、函數的返回值規范:????
????對于函數的返回位置,盡量保持單一性,即一個函數盡量做到只有一個返回位置。(單入口單出口)。????
????要求大家統一函數的返回值,所有的函數的返回值都將以編碼的方式返回。????
????例如編碼定義如下:????
????#define????CM_POINT_IS_NULL????CMMAKEHR(0X200)????
????:????
????:????
????建議函數實現如下:????
????long????函數名(參數,……)????
????{????
????long????lResult;????//保持錯誤號????
????lResult=CM_OK;????
????//如果參數有錯誤則返回錯誤號????
????if(參數==NULL)????
????{????
????lResult=CM_POINT_IS_NULL;????
????goto????END;????
????}????
????……????
????END:????
????return????lResult;????
????}????
????2、關于goto的應用:????
????對goto語句的應用,我們要求盡量少用goto語句。對一定要用的地方要求只能向后轉移。????
????3、資源變量的處理(資源變量是指消耗系統資源的變量):????
????對資源變量一定賦初值。分配的資源在用完后必須馬上釋放,并重新賦值。????
????4、對復雜的條件判斷,為了程序的可讀性,應該盡量使用括號。????
????例:if(((szFileName!=NULL)&&(lCount>=0)))||(bIsReaded==TRUE))????
??
五、可移植性:????
????1、高質量的代碼要求能夠跨平臺,所以我們的代碼應該考慮到對不同的平臺的支持,特別是對windows98和windowsnt的支持。????
????2、由于C語言的移植性比較好,所以對算法函數要求用C代碼,不能用C++代碼。????
????3、對不同的硬件與軟件的函數要做不同的處理
總結
以上是生活随笔為你收集整理的vc 中C 语言命名规范(转)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: speex版本下载
- 下一篇: __stdcall c++ 默认_JMe