關(guān)于編成規(guī)范-命名規(guī)則的淺談 本命名取自“匈牙利”法,僅供參考。 數(shù)據(jù)類型的命名規(guī)則參考: 定義類型: 前綴 類型 類型描述 示例 占字節(jié)(Win32) 有效值 取值范圍 b Boolena-布爾 1Bit的標(biāo)志 bool bFlag 4 (TRUE/FALSE) (0x0 ~0x1) /* typedef int bool */ ------------------------------------------------------------------------------------- by Byte 字節(jié) 無符號的8bit字節(jié) unsigned char byValue; 1 0 ~255 (0x0 ~0xFF) ch Char 字符 有符號的8bit字節(jié) signed char chValue; 1 -128~127 (0x80~0x7F) ------------------------------------------------------------------------------------- w 不帶符號的Word字 無符號的16bit整數(shù) unsigned short wValue; 2 0 ~65535 (0x0 ~0xFFFF) sw 帶符號的16位整形數(shù) 有符號的16bit整數(shù) signed short swValue; 2 -32768~32767 (0x8000~0x7FFF) ------------------------------------------------------------------------------------- dw 不帶符號的doubleword字 無符號的32bit整數(shù) unsigned int dwValue; 4 0 ~4294967295 (0x0 ~0xFFFFFFFF) n 帶符號的32位整形數(shù) 有符號的32bit整數(shù) signed int nValue; 4 -2147483648~2147483647 (0x80000000~0x7FFFFFFF) ------------------------------------------------------------------------------------- f 單精度浮點(diǎn)數(shù) 單精度浮點(diǎn)數(shù) float fValue; 4 d 雙精度浮點(diǎn)數(shù) 雙精度浮點(diǎn)數(shù) double dValue; 8 ------------------------------------------------------------------------------------- p 指針(pointer) 指針 char *pchName; 4 pc const指針(pointer) const指針 const char *pcchName; / /* unsigned char *pbyData; / unsigned short *pwData; */ /* const int *pcnData; / unsigned int *pdwData; */ ------------------------------------------------------------------------------------- t typedef自定義類型 struct結(jié)構(gòu)體等類型 TNameInfo tName; / pt 自定義類型指針 struct結(jié)構(gòu)體指針等 PTNameInfo *ptName; / ------------------------------------------------------------------------------------- a Array數(shù)組 數(shù)組 char achName[20]; / aa 二位Array數(shù)組 多位數(shù)組 unsigned char aabyName[4][2]; / ------------------------------------------------------------------------------------- ap 存放指針的數(shù)組 存放指針的數(shù)組 char *apchName[2]; / pa 指向數(shù)組的指針 指向數(shù)組的指針 unsigned char *pabyName; / ------------------------------------------------------------------------------------- em enum枚舉類型 枚舉類型 EM_NAME emName; 4 c class類 class類 CName cName; / ------------------------------------------------------------------------------------- pf 函數(shù)指針(pointer func) 函數(shù)指針 typedef int (*pfMsgFunc)(int type); ------------------------------------------------------------------------------------- s_ 靜態(tài)變量(static) 靜態(tài)變量 static int s_nValue; g_ 全局變量(global) 全局變量 int g_nValue; m_ 類的數(shù)據(jù)成員(member) 類的數(shù)據(jù)成員 int m_nValue; 函數(shù)名的命名規(guī)則參考: 1. 函數(shù)名的首字母建議大寫,函數(shù)名采用大小寫字母結(jié)合的形式 int GetMaxValue(void) { do someting; } 2. 定義函數(shù)時(shí),若函數(shù)無返回值,請冠以void 函數(shù)名格式;若函數(shù)無參數(shù),請?jiān)趨?shù)中寫入void格式; void InitData(void) { do someting; } 1. 全局函數(shù)的名字應(yīng)當(dāng)使用“動(dòng)詞”或者“動(dòng)詞+名詞”(動(dòng)賓詞組)。 DrawBox(void); // 全局函數(shù) 2. 用正確的反義詞組命名具有互斥意義的變量或相反動(dòng)作的函數(shù)等。 void SetValue(int nValue) { g_nValue = nValue; } int GetValue(void) { return g_nValue; } 3. 回調(diào)函數(shù)最好出現(xiàn)“CB”字符; typedef int (*pfTimerCB)(int type); CreateTimer(g_TaskTimer, TaskTimerCB, NULL); 3. 在同一軟件產(chǎn)品內(nèi),避免重名的函數(shù)出現(xiàn) 我們在不同的文件中都可以通過定義同樣的函數(shù) 模塊A static void InitData(void); // 最好改成 static void InitAData(void); 模塊B static void InitData(void); // 最好改成 static void InitBData(void); 4. 函數(shù)名的長度最好小于30字符內(nèi)??梢允褂每s略詞語,但是要有必要的全詞注釋。 tSysPara *GetSysPara(void) // tSystemPara *GetSystemParameter(void) 5. 一個(gè)函數(shù)代碼最好控制在100行以內(nèi),一個(gè)模塊文件,代碼最好控制在1000行以內(nèi)。 6. 最后,還有一點(diǎn)小小的建議,就是無論我們使用那種工具編寫代碼,VC6.0,SourceInsignt,UltraEdit,等 請按照格式排板,對齊,并將tab轉(zhuǎn)換成4個(gè)空格,這樣便于察看,修改等。 代碼示例:與零值比較(摘自林銳博士-高質(zhì)量C++/C 編程指南) 1. 布爾變量與零值比較 不可將布爾變量直接與TRUE、FALSE 或者1、0 進(jìn)行比較。 根據(jù)布爾類型的語義,零值為“假”(記為FALSE),任何非零值都是“真”(記為TRUE)。TRUE 的值究竟是什么并沒有統(tǒng)一的標(biāo)準(zhǔn)。例如Visual C++ 將TRUE 定義為1,而Visual Basic 則將TRUE 定義為-1。 假設(shè)布爾變量名字為flag,它與零值比較的標(biāo)準(zhǔn)if 語句如下: if (flag) // 表示flag 為真 if (!flag) // 表示flag 為假 其它的用法都屬于不良風(fēng)格,例如: if (TRUE == flag) if (1 == flag) if (FALSE == flag) if (0 == flag) 2. 整型變量與零值比較 應(yīng)當(dāng)將整型變量用“==”或“!=”直接與0 比較。 假設(shè)整型變量的名字為value,它與零值比較的標(biāo)準(zhǔn)if 語句如下: if (0 == value) if (0 != value) 不可模仿布爾變量的風(fēng)格而寫成 if (value) // 會讓人誤解 value 是布爾變量 if (!value) 3. 浮點(diǎn)變量與零值比較 不可將浮點(diǎn)變量用“==”或“!=”與任何數(shù)字比較。 千萬要留意,無論是float 還是double 類型的變量,都有精度限制。所以一定要避免將浮點(diǎn)變量用“==”或“!=”與數(shù)字比較,應(yīng)該設(shè)法轉(zhuǎn)化成“>=”或“ <=”形式。 假設(shè)浮點(diǎn)變量的名字為x,應(yīng)當(dāng)將 if (0.0 == x) // 隱含錯(cuò)誤的比較 轉(zhuǎn)化為 if ((x>=-EPSINON) && (x <=EPSINON)) 其中EPSINON 是允許的誤差(即精度)。 C++ const float EPSINON = 0.00001; C #define EPSINON (float)0.00001 4. 指針變量與零值比較 應(yīng)當(dāng)將指針變量用“==”或“!=”與NULL 比較。 指針變量的零值是“空”(記為NULL)。盡管NULL 的值與0 相同,但是兩者意義不同。假設(shè)指針變量的名字為p,它與零值比較的標(biāo)準(zhǔn)if 語句如下: if (NULL == p) // p 與NULL 顯式比較,強(qiáng)調(diào)p 是指針變量 if (NULL != p) 不要寫成 if (0 == p) // 容易讓人誤解p 是整型變量 if (0 != p) 或者 if (p) // 容易讓人誤解p 是布爾變量 if (!p) |
|