天天看點

Visual C++ 程式設計命名規則總結

Visual C++ 程式設計命名規則總結 收藏

一、程式風格:

1、嚴格采用階梯層次組織程式代碼:各層次縮進的分格采用VC的預設風格,即每層次縮進為4格,括号位于下一行。要求相比對的大括号在同一列,對繼行則要求再縮進4格。

2、提示資訊字元串的位置:在程式中需要給出的提示字元串,為了支援多種語言的開發,除了一些給調試用的臨時資訊外,其他所有的提示資訊必須定義在資源中。

3、對變量的定義,盡量位于函數的開始位置。

二、命名規則:

1、變量名的命名規則

①變量的命名規則要求用“匈牙利法則”。即開頭字母用變量的類型,其餘部分用變量的英文意思或其英文意思的縮寫,盡量避免用中文的拼音,要求單詞的第一個字母應大寫,即:變量名=變量類型+變量的英文意思(或縮寫)。對非通用的變量,在定義時加入注釋說明,變量定義盡量可能放在函數的開始處。見下表:

bool(BOOL)    用b開頭     bIsParent

byte(BYTE)    用by開頭    byFlag

short             用s開頭      sStep

int                 用i或n開頭,一般i表示索引,n表示計數      iStep, nCount

long              用ln開頭      lnSum

char              用c開頭      cCount

float              用f開頭       fAvg

double          用d開頭      dDeta

void(VOID)     用v開頭     vVariant

unsigned int (WORD)     用w開頭     wCount

unsigned long (DWORD)     用dw開頭 dwBroad

HANDLE(HINSTANCE)     用h開頭     hHandle

LPCSTR(LPCTSTR)     用str開頭     strName

用0結尾的字元串     用sz開頭     szFileName

對未給出的變量類型要求提出并給出命名建議給技術委員會。

②指針變量命名的基本原則為:

對一重指針變量的基本原則為:

"p"+變量類型字首+命名。如一個float*型應該表示為pfStat;

對多重指針變量的基本規則為:

二重指針:"pp"+變量類型字首+命名;

三重指針:     “ppp”+變量類型字首+命名...

③全局變量用g_開頭,如一個全局的長型變量定義為g_lFailCount,即:變量名=g_+變量類型+變量的英文意思(或縮寫)

④靜态變量用s_開頭,如一個靜态的指針變量定義為s_plPerv_Inst,即:變量名=s_+變量類型+變量的英文意思(或縮寫)

⑤匈牙利命名法中成員變量用m_開頭,如一個長型成員變量定義為m_lCount,即:變量名=m_+變量類型+變量的英文意思(或縮寫)。但實際中,對于有幾十個甚至上百個成員的類而言,m_開頭命名成員變量顯得很繁瑣。是以我的經驗是,成員變量以下劃線'_'開頭即可。m_開頭可用于命名控件變量。

⑥枚舉變量(enum),要求用枚舉變量或其縮寫做字首,并且要求用大寫。如:

enum cmEMDAYS

{

    EMDAYS_MONDAY;

    EMDAYS_TUESDAY;

    ...

};

⑦對struct、union、class變量的命名要求定義的類型用大寫。并要加上字首,其内部變量的命名規則與變量命名規則一緻。結構一般用S開頭,如:

struct ScmNPoint

{

    int     nX;     //點的X位置

    int     nY;    //點的Y位置

};

聯合體一般用U開頭,如:

union UcmLPoint

{

    long     lnX;

    long     lnY;

};

類一般用C開頭,如:

class CcmFPoint

{

public:

float     fPoint;

};

對一般的結構應該定義為類模闆,為以後的擴充性考慮。

⑧對常量命名,要求常量名用大寫,常量名用英文表達其意思。如:

#define CM_FILE_NOT_FOUND CMMAKEHR(0X20B)

其中CM表示類别。

⑨對const的變量要求在變量的命名規則前加入c_,即:c_+變量命名規則;例如:

const     char*     c_szFileName。

2、     函數的命名規範:

函數的命名應該盡量用英文表達出函數完成的功能。遵循動賓結構的命名法則,函數名中動詞在前,并在命名前加入函數的字首,函數名的長度不得少于8個字母。例如:long cmGetDeviceCount(…);

3、函數參數規範:

①參數名稱的命名參照變量命名規範。我的經驗是,最好參數末尾加下劃線,以差別函數内的局部變量。

②為了提高程式的運作效率,減少參數占用的堆棧,傳遞大結構的參數,一律采用指針或引用方式傳遞。

③為了便于其他程式員識别某個指針參數是入口參數還是出口參數,同時便于編譯器檢查錯誤,應該在入口參數前加入const标志。如:bool cmCopyString(const char *szSource_, char *szDest);

4、引出函數規範:對于從動态庫引出作為二次開發函數公開的函數,為了能與其他函數以及Windows的函數區分,采用類别字首+基本命名規則的方法命名。例如:在對動态庫中引出的一個圖象編輯的函數定義為:imgFunctionname(其中img為image縮寫)。

現給出三種庫的命名字首:

①對通用函數庫,采用cm為字首;

②對三維函數庫,采用vr為字首;

③對圖象函數庫,采用img為字首。         對宏定義,結果代碼用同樣的字首。          5、檔案名(包括動态庫、元件、控件、工程檔案等)的命名規範:          檔案名的命名要求表達出檔案的内容,要求檔案名的長度不得少于5個字母,嚴禁使用象file1,myfile之類的檔案名。    

三、程式健壯性:

1、函數的傳回值規範:

對于函數的傳回位置,盡量保持單一性,即一個函數盡量做到隻有一個傳回位置。(單入口單出口)。要求大家統一函數的傳回值,所有的函數的傳回值都将以編碼的方式傳回。例如編碼定義如下:          #define     CM_POINT_IS_NULL     CMMAKEHR(0X200)

建議函數實作如下:

long function(param1, param2, …)

{

    long     lResult;     //保持錯誤号

    lResult=CM_OK;          //如果參數有錯誤則傳回錯誤号

    if(param1==NULL)

    {

        lResult=CM_POINT_IS_NULL;

        goto     END;

    }

    ...

END:

    return     lResult;

}

2、關于goto的應用:

對goto語句的應用,我們要求盡量少用goto語句。對一定要用的地方要求隻能向後轉移。

3、資源變量的處理(資源變量是指消耗系統資源的變量):

對資源變量一定賦初值。配置設定的資源在用完後必須馬上釋放,并重新指派。

 4、對複雜的條件判斷,為了程式的可讀性,應該盡量使用括号。例:if(((szFileName!=NULL)&&(lCount>=0)))||(bIsRead==TRUE))

四、可移植性:1、高品質的代碼要求能夠跨平台,是以我們的代碼應該考慮到對不同的平台的支援,特别是對Windows 98和Windows NT的支援。一個最簡單的例子:Windows程式下的字元串應加上宏_T或_TEXT。

2、由于C語言的移植性比較好,是以對算法函數要求用C代碼,不能用C++代碼。

本文來自CSDN部落格,轉載請标明出處:http://blog.csdn.net/Greenlander/archive/2007/08/24/1757069.aspx