在項目開發的過程當中會遇到不少的宏定義,宏定義的做用目前本人知道的有三種有法:程序員
第一種: #define OK 1 函數
這種用法能夠直接了當的代表代碼的用意,從而防止「魔數」的出現,恰當的宏定義一些常量值能夠有效的增長代碼的可讀性。指針
第二種: #define MAX(a, b) ( (a) > (b) ? (a) : (b) )內存
這種宏定義函數的方法可使代碼變得更簡潔,並且能夠提升代碼的執行效率,咱們知道程序在調用宏定義時,是在代碼執行時宏定義的地方直接進行替換,因此不會像調用函數那樣進行壓棧,讓PC指針跳轉另外一塊內存區域,從而使執行效率提升。在編譯器的頭文件中也有不少相似於這種方式的宏定義,只不過函數的實體是單獨提取出來的。開發
第三種:#define function(...)編譯器
第一次遇到這種定義的時候感受特別奇怪,由於它沒有實體,宏替換時沒有具體的操做內容,可這又有什麼用呢?答案是這種宏定義的做用是一種「佔位」,即宏定義了一個函數,這個函數裏面的參數有多少個無所謂,它告訴了編譯器已經存在這個函數了,你不能夠從新再定義一個和它重名的函數,不然會報錯,這種定義在大型的項目中很常見,從而防止不一樣的程序員在做業中定義同一種函數。io