日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

C++編程命名規(guī)則

 @IT小小鳥@ 2012-03-08
一、程序風(fēng)格:     

    1、嚴(yán)格采用階梯層次組織程序代碼:     
    各層次縮進(jìn)的分格采用VC的缺省風(fēng)格,即每層次縮進(jìn)為4格,括號(hào)位于下一行。
    要求相匹配的大括號(hào)在同一列,對(duì)繼行則要求再縮進(jìn)4格。例如:     
    2、提示信息字符串的位置     
    在程序中需要給出的提示字符串,為了支持多種語(yǔ)言的開發(fā),除了一些給調(diào)試用的臨時(shí)信息外,其他所有的提示信息必須定義在資源中。     
    3、對(duì)變量的定義,盡量位于函數(shù)的開始位置。     

二、命名規(guī)則:     
    1、變量名的命名規(guī)則     
    ①、變量的命名規(guī)則要求用“匈牙利法則”。即開頭字母用變量的類型,其余部分用變量的英文意思或其英文意思的縮寫,盡量避免用中文的拼音,要求單詞的第一個(gè)字母應(yīng)大寫。     
    即:     變量名=變量類型+變量的英文意思(或縮寫)     
    對(duì)非通用的變量,在定義時(shí)加入注釋說(shuō)明,變量定義盡量可能放在函數(shù)的開始處。     
    見(jiàn)下表:     
    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結(jié)尾的字符串     用sz開頭     szFileName     
    
    對(duì)未給出的變量類型要求提出并給出命名建議給技術(shù)委員會(huì)。     
    
    ②、指針變量命名的基本原則為:     
    對(duì)一重指針變量的基本原則為:     
    “p”+變量類型前綴+命名     
    如一個(gè)float*型應(yīng)該表示為pfStat     
    對(duì)多重指針變量的基本規(guī)則為:     
    二重指針:     “pp”+變量類型前綴+命名     
    三重指針:     “ppp”+變量類型前綴+命名     
    ......     
    ③、全局變量用g_開頭,如一個(gè)全局的長(zhǎng)型變量定義為g_lFailCount,即:變量名=g_+變量類型+變量的英文意思(或縮寫)     
    ④、靜態(tài)變量用s_開頭,如一個(gè)靜態(tài)的指針變量定義為s_plPerv_Inst,即:     變量名=s_+變量類型+變量的英文意思(或縮寫)     
    ⑤、成員變量用m_開頭,如一個(gè)長(zhǎng)型成員變量定義為m_lCount;即:變量名=m_+變量類型+變量的英文意思(或縮寫)     
    ⑥、對(duì)枚舉類型(enum)中的變量,要求用枚舉變量或其縮寫做前綴。并且要求用大寫。     
    如:enum     cmEMDAYS     
    {     
    EMDAYS_MONDAY;     
    EMDAYS_TUESDAY;     
    ……     
    };     
    ⑦、對(duì)struct、union、class變量的命名要求定義的類型用大寫。并要加上前綴,其內(nèi)部變量的命名規(guī)則與變量命名規(guī)則一致。     
    結(jié)構(gòu)一般用S開頭     
    如:struct     ScmNPoint     
    {     
    int     nX;//點(diǎn)的X位置     
    int     nY;     //點(diǎn)的Y位置     
    };     
    聯(lián)合體一般用U開頭     
    如:     union     UcmLPoint     
    {     
    long     lX;     
    long     lY;     
    }     
    類一般用C開頭     
    如:     
    class     CcmFPoint     
    {     
    public:     
    float     fPoint;     
    };     
    對(duì)一般的結(jié)構(gòu)應(yīng)該定義為類模板,為以后的擴(kuò)展性考慮     
    如:     
    template     
    class     CcmTVector3d     
    {     
    public:     
    TYPE     x,y,z;     
    };     
    ⑧、對(duì)常量(包括錯(cuò)誤的編碼)命名,要求常量名用大寫,常量名用英文表達(dá)其意思。     
    如:#define     CM_FILE_NOT_FOUND     CMMAKEHR(0X20B)     其中CM表示類別。     
    ⑨、對(duì)const     的變量要求在變量的命名規(guī)則前加入c_,即:c_+變量命名規(guī)則;例如:     
    const     char*     c_szFileName;     
    2、     函數(shù)的命名規(guī)范:     
    函數(shù)的命名應(yīng)該盡量用英文表達(dá)出函數(shù)完成的功能。遵循動(dòng)賓結(jié)構(gòu)的命名法則,函數(shù)名中動(dòng)詞在前,并在命名前加入函數(shù)的前綴,函數(shù)名的長(zhǎng)度不得少于8個(gè)字母。     
    例如:     
    long     cmGetDeviceCount(……);     
    3、函數(shù)參數(shù)規(guī)范:     
    ①、     參數(shù)名稱的命名參照變量命名規(guī)范。     
    ②、     為了提高程序的運(yùn)行效率,減少參數(shù)占用的堆棧,傳遞大結(jié)構(gòu)的參數(shù),一律采用指針或引用方式傳遞。     
    ③、     為了便于其他程序員識(shí)別某個(gè)指針參數(shù)是入口參數(shù)還是出口參數(shù),同時(shí)便于編譯器檢查錯(cuò)誤,應(yīng)該在入口參數(shù)前加入const標(biāo)志。如:     
    ……cmCopyString(const     char     *     c_szSource,     char     *     szDest)     
    4、引出函數(shù)規(guī)范:     
    對(duì)于從動(dòng)態(tài)庫(kù)引出作為二次開發(fā)函數(shù)公開的函數(shù),為了能與其他函數(shù)以及Windows的函數(shù)區(qū)分,采用類別前綴+基本命名規(guī)則的方法命名。例如:在對(duì)動(dòng)態(tài)庫(kù)中引出的一個(gè)圖象編輯的函數(shù)定義為     imgFunctionname(其中img為image縮寫)。     
    現(xiàn)給出三種庫(kù)的命名前綴:     
    ①、     對(duì)通用函數(shù)庫(kù),采用cm為前綴。     
    ②、     對(duì)三維函數(shù)庫(kù),采用vr為前綴。     
    ③、     對(duì)圖象函數(shù)庫(kù),采用img為前綴。     
    對(duì)宏定義,結(jié)果代碼用同樣的前綴。     
    5、文件名(包括動(dòng)態(tài)庫(kù)、組件、控件、工程文件等)的命名規(guī)范:     
    文件名的命名要求表達(dá)出文件的內(nèi)容,要求文件名的長(zhǎng)度不得少于5個(gè)字母,嚴(yán)禁使用象file1,myfile之類的文件名。     

三、注釋規(guī)范:     
    1、函數(shù)頭的注釋     
    對(duì)于函數(shù),應(yīng)該從“功能”,“參數(shù)”,“返回值”、“主要思路”、“調(diào)用方法”、“日期”六個(gè)方面用如下格式注釋:     
    //程序說(shuō)明開始     
    //================================================================//     
    //     功能:     從一個(gè)String     中刪除另一個(gè)String。     
    //     參數(shù):     strByDelete,strToDelete     
    //     (入口)     strByDelete:     被刪除的字符串(原來(lái)的字符串)     
    //     (出口)     strToDelete:     要從上個(gè)字符串中刪除的字符串。     
    //     返回:     找到并刪除返回1,否則返回0。(對(duì)返回值有錯(cuò)誤編碼的要//     求列出錯(cuò)誤編碼)。     
    //     主要思路:本算法主要采用循環(huán)比較的方法來(lái)從strByDelete中找到     
    //     與strToDelete相匹配的字符串,對(duì)多匹配strByDelete     
    //     中有多個(gè)strToDelete子串)的情況沒(méi)有處理。請(qǐng)參閱:     
    //     書名......     
    //     調(diào)用方法:......     
    //     日期:起始日期,如:2000/8/21.9:40--2000/8/23.21:45     
    //================================================================//     
    函數(shù)名(……)     
    //程序說(shuō)明結(jié)束     
    ①、     對(duì)于某些函數(shù),其部分參數(shù)為傳入值,而部分參數(shù)為傳出值,所以對(duì)參數(shù)要詳細(xì)說(shuō)明該參數(shù)是入口參數(shù),還是出口參數(shù),對(duì)于某些意義不明確的參數(shù)還要做詳細(xì)說(shuō)明(例如:以角度作為參數(shù)時(shí),要說(shuō)明該角度參數(shù)是以弧度(PI),還是以度為單位),對(duì)既是入口又是出口的變量應(yīng)該在入口和出口處同時(shí)標(biāo)明。等等。     
    ②、     函數(shù)的注釋應(yīng)該放置在函數(shù)的頭文件中,在實(shí)現(xiàn)文件中的該函數(shù)的實(shí)現(xiàn)部分應(yīng)該同時(shí)放置該注釋。     
    ③、     在注釋中應(yīng)該詳細(xì)說(shuō)明函數(shù)的主要實(shí)現(xiàn)思路、特別要注明自己的一些想法,如果有必要?jiǎng)t應(yīng)該寫明對(duì)想法產(chǎn)生的來(lái)由。對(duì)一些模仿的函數(shù)應(yīng)該注釋上函數(shù)的出處。     
    ④、     在注釋中詳細(xì)注明函數(shù)的適當(dāng)調(diào)用方法,對(duì)于返回值的處理方法等。在注釋中要強(qiáng)調(diào)調(diào)用時(shí)的危險(xiǎn)方面,可能出錯(cuò)的地方。     
    ⑤、     對(duì)日期的注釋要求記錄從開始寫函數(shù)到結(jié)束函數(shù)的測(cè)試之間的日期。     
    ⑥、     對(duì)函數(shù)注釋開始到函數(shù)命名之間應(yīng)該有一組用來(lái)標(biāo)識(shí)的特殊字符串。     
    如果算法比較復(fù)雜,或算法中的變量定義與位置有關(guān),則要求對(duì)變量的定義進(jìn)行圖解。對(duì)難以理解的算法能圖解盡量圖解。     
    2、變量的注釋:     
    對(duì)于變量的注釋緊跟在變量的后面說(shuō)明變量的作用。原則上對(duì)于每個(gè)變量應(yīng)該注釋,但對(duì)于意義非常明顯的變量,如:i,j等循環(huán)變量可以不注釋。     
    例如:     long     lLineCount     //線的根數(shù)。     
     3、文件的注釋:     
    文件應(yīng)該在文件開頭加入以下注釋:     
    /////////////////////////////////////////////////////////////////////     
    //     工程:     文件所在的項(xiàng)目名。     
    //     作者:**,修改者:**     
    //     描述:說(shuō)明文件的功能。     
    //     主要函數(shù):…………     
    //     版本:     說(shuō)明文件的版本,完成日期。     
    //     修改:     說(shuō)明對(duì)文件的修改內(nèi)容、修改原因以及修改日期。     
    //     參考文獻(xiàn):     ......     
    /////////////////////////////////////////////////////////////////////     
    為了頭文件被重復(fù)包含要求對(duì)頭文件進(jìn)行定義如下:     
    #ifndef     __FILENAME_H__     
    #define     __FILENAME_H__     
    其中FILENAME為頭文件的名字。     
       4、其他注釋:     
    在函數(shù)內(nèi)我們不需要注釋每一行語(yǔ)句。但必須在各功能模塊的每一主要部分之前添加塊注釋,注釋每一組語(yǔ)句,在循環(huán)、流程的各分支等,盡可能多加以注釋。     
    其中的循環(huán)、條件、選擇等位置必須注釋。     
    對(duì)于前后順序不能顛倒的情況,建議在注釋中增加序號(hào)。     
    例如:     
    在其他順序執(zhí)行的程序中,每隔3—5行語(yǔ)句,必須加一個(gè)注釋,注明這一段語(yǔ)句所組成的小模塊的作用。對(duì)于自己的一些比較獨(dú)特的思想要求在注釋中標(biāo)明。     

四、程序健壯性:     
    1、函數(shù)的返回值規(guī)范:     
    對(duì)于函數(shù)的返回位置,盡量保持單一性,即一個(gè)函數(shù)盡量做到只有一個(gè)返回位置。(單入口單出口)。     
    要求大家統(tǒng)一函數(shù)的返回值,所有的函數(shù)的返回值都將以編碼的方式返回。     
    例如編碼定義如下:     
    #define     CM_POINT_IS_NULL     CMMAKEHR(0X200)     
    :     
    :     
    建議函數(shù)實(shí)現(xiàn)如下:     
    long     函數(shù)名(參數(shù),……)     
    {     
    long     lResult;     //保持錯(cuò)誤號(hào)     
    lResult=CM_OK;     
    //如果參數(shù)有錯(cuò)誤則返回錯(cuò)誤號(hào)     
    if(參數(shù)==NULL)     
    {     
    lResult=CM_POINT_IS_NULL;     
    goto     END;     
    }     
    ……     
    END:     
    return     lResult;     
    }     
    2、關(guān)于goto的應(yīng)用:     
    對(duì)goto語(yǔ)句的應(yīng)用,我們要求盡量少用goto語(yǔ)句。對(duì)一定要用的地方要求只能向后轉(zhuǎn)移。     
    3、資源變量的處理(資源變量是指消耗系統(tǒng)資源的變量):     
    對(duì)資源變量一定賦初值。分配的資源在用完后必須馬上釋放,并重新賦值。     
    4、對(duì)復(fù)雜的條件判斷,為了程序的可讀性,應(yīng)該盡量使用括號(hào)。     
    例:if(((szFileName!=NULL)&&(lCount>=0)))||(bIsRead==TRUE))     
  
五、可移植性:     
    1、高質(zhì)量的代碼要求能夠跨平臺(tái),所以我們的代碼應(yīng)該考慮到對(duì)不同的平臺(tái)的支持,特別是對(duì)windows 98和windows nt的支持。     
    2、由于C語(yǔ)言的移植性比較好,所以對(duì)算法函數(shù)要求用C代碼,不能用C++代碼。     
    3、對(duì)不同的硬件與軟件的函數(shù)要做不同的處理

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多