4 回答
TA貢獻2012條經驗 獲得超12個贊
避免名稱沖突的規則都是C ++標準(參見Stroustrup書)和C ++大師(Sutter等)提到的。
個人規則
因為我不想處理案件,并且想要一個簡單的規則,所以我設計了一個簡單而正確的個人案例:
命名符號時,如果您符合以下條件,則可避免與編譯器/ OS /標準庫沖突:
永遠不要用下劃線開始一個符號
永遠不要在里面用兩個連續的下劃線命名。
當然,將代碼放在一個唯一的命名空間中也有助于避免沖突(但不能防止惡意宏)
一些例子
(我使用宏,因為它們是C / C ++符號的代碼污染更多,但它可以是從變量名到類名的任何東西)
#define _WRONG#define __WRONG_AGAIN#define RIGHT_#define WRONG__WRONG#define RIGHT_RIGHT#define RIGHT_x_RIGHT
來自C ++ 0x草案的摘錄
從n3242.pdf文件(我希望最終的標準文本類似):
17.6.3.3.2全局名稱[global.names]
某些名稱和函數簽名集始終保留給實現:
- 包含雙下劃線_ _或以下劃線后跟大寫字母(2.12)開頭的每個名稱都保留給實現以供任何使用。
- 以下劃線開頭的每個名稱都保留給實現,以用作全局名稱空間中的名稱。
但是也:
17.6.3.3.5用戶定義的文字后綴[usrlit.suffix]
不以下劃線開頭的文字后綴標識符保留用于將來的標準化。
最后一個條款令人困惑,除非您認為如果未在全局命名空間中定義,以一個下劃線開頭并后跟一個小寫字母的名稱將為Ok ...
TA貢獻1911條經驗 獲得超7個贊
至于問題的另一部分,通常將下劃線放在變量名的末尾,以免與內部任何內容發生沖突。
我甚至在類和名稱空間內執行此操作,因為我只需要記住一條規則(與“在全局范圍內的名稱末尾,以及其他地方名稱的開頭”相比)。
- 4 回答
- 0 關注
- 1279 瀏覽
添加回答
舉報
