微軟的「匈牙利命名法」雖知名,但最大缺點是繁瑣。例如 int i, j, k; 須改成 int iI, iJ, iK;,讓多數程式設計師無法忍受。現實中不存在讓所有人滿意的命名規則,關鍵在於制定團隊多數人接受的規範並貫徹執行。
採用英文單字或組合,禁用漢語拼音。用詞準確,如 CurrentValue 優於 NowValue。
現代 C++ 無長度限制,長名稱能更好表達含義。但非越長越好,maxval 優於 maxValueUntilOverflow。單字元名稱(i,j,k,m,n,x,y,z)適合函式內區域變數。
AddChildadd_childint x, X; // 易混淆
void foo(int x);
void FOO(float x); // 易混淆
雖作用域不同不會語法錯誤,但極易誤解。
float value;
float oldValue;
float newValue;
DrawBox()box->Draw()作者對匈牙利法做合理簡化,適合 Windows 應用開發:
| 規則 | 說明 | 範例 |
|---|---|---|
| 3-2-1 | 類別名、函式名:大寫開頭單字組合 | class Node; void SetValue(int) |
| 3-2-2 | 變數、參數:小寫開頭單字組合 | BOOL flag; int drawMode; |
| 3-2-3 | 常數:全大寫,底線分隔 | const int MAX_LENGTH = 100; |
| 3-2-4 | 靜態變數:前綴 s_ | static int s_initValue; |
| 3-2-5 | 全域變數(不得已時):前綴 g_ | int g_howManyPeople; |
| 3-2-6 | 類別資料成員:前綴 m_(避免與參數同名) | m_width = width; |
| 3-2-7 | 庫識別符加前綴防衝突 | OpenGL 函式 gl*,常數 GL_* |
原文此處缺失