從學習編程語言開始,我們就知道變量或是函數的命名不能使用系統的關鍵字。
但是有時候,你不得不這么做。
比如mac、ios、Android、windows共用一個底層代碼,這樣為了使底層更加通用,有時候就會忽略某種語言的某個關鍵字。
也許關鍵字A對于win32就是一個系統關鍵字,而A不是objective-c的關鍵字。
這個時候為了保證代碼的通用性,就需要重定義關鍵字,也就是所說的屏蔽掉系統關鍵字。
比如對于win32平臺,需要屏蔽系統的某個關鍵字,你就可以這樣做:
~~~
#if PLATFORM == WIN32
#undef ERROR
#endif
enum Type {
CHAT = 0,
ERROR,
UNKNOWN,
};
~~~
而上訴代碼的第一行,使用的是預編譯頭。這樣就很好的屏蔽了系統的關鍵字ERROR,而ERROR成為了你定義的枚舉類型。
- 前言
- deprecated關鍵字
- 指針(內存泄露)
- 頭文件相互包含(Compiler error C2653: not a class or namespace name)
- 獲取一張圖片的width和height
- This function or variable may be unsafe.
- 智能指針陷阱
- string中的c_str()陷阱
- wstring與string的轉換
- windows下chrome瀏覽器插件不能安裝
- 重定義關鍵字
- 正確釋放vector的內存
- 獲取設備環境HDC
- 抽象類不能實例化對象(但是你明明定義的不是抽象類)
- 重載賦值運算符的自我賦值
- 程序中的變量未初始化
- 成對使用new和delete時要采取相同的形式
- 意想不到的除數為零
- map的初始化(插入數據)
- 正則表達式截取字符串
- 捕獲窗口之外的鼠標消息(鉤子還是??)
- 類中的靜態成員變量(static or const static)
- 有if就要有else(一定成對)
- map查找結果處理
- 使用using namespace std的壞習慣
- new一個指針數組、以及創建動態二維數組
- 使用太多的全局變量
- 沒有及時break出for循環
- vector使用erase后迭代器變成野指針
- C++函數的默認參數(重新定義默認參數)
- 0xC0000005: 讀取位置 xxx時發生訪問沖突
- std::string初始化、最快速判斷字符串為空
- 你開發的軟件安裝在C盤Program Files (x86)下產生的異常