在c++程式中,我們經常看到#開頭的語句,這些語句就是預處理器要處理的東西,他們不是c++程式的一部分。
最常見的是#define預處理,我們也稱之為巨集。
它的作用是文字替換,它的寫法是:
#define macro-name replace-text
文字替換的額意思就是,只要在c++程式中遇到這個macro-name,變數也好,任何東西也好,都會被替換為replace-text。
比如說預處理器定義: #define pi 3.1415 ,那麼在編譯器看來,所有我在程式裡寫到pi的地方,編譯器都會當我寫的是3.1415來處理。
也可以用#define來定義乙個帶引數的巨集:
例如: #define max(a, b) (a>b? a:b)
這其實和函式的作用是一樣的。
在實際應用中,我們不推薦使用巨集定義,因為巨集定義是不可靠的,它是單純的機械替換,容易出錯。那麼有沒有情況,使用巨集定義會相對方便呢?
有,就是對於一些簡單函式。比如上面我們定義了乙個比較大小的巨集,應用這個巨集的話,我們可以比較任意型別引數的大小,不管它是int,float,double,這是比較省事的,因為如果我們要用函式來實現,那麼就得定義返回值各不相同的函式,來分別實現這些比較。
C 預處理器
偶爾翻c 的教材,看到了一些以前自己不太關注的角落。參考教材 c 大學教程 harvey m.deitel 和paul james deitel著。預處理發生在編譯之前,包括把其他檔案包含到要編譯的檔案中 定義符號常量和巨集 程式 的條件編譯以及預處理指令的條件執行。對應的,預處理指令有 檔案包含命...
C 預處理器
預處理器是一些指令,指示編譯器在實際編譯之前所需完成的預處理。所有的預處理器指令都是以井號 開頭,只有空格字元可以出現在預處理指令之前。預處理指令不是 c 語句,所以它們不會以分號 結尾。我們已經看到,之前所有的例項中都有 include指令。這個巨集用於把頭檔案包含到原始檔中。c 還支援很多預處理...
C 預處理器
預處理器是一些指令,指示編譯器在實際編譯之前所需完成的預處理。所有的預處理器指令都是以井號 開頭,只有空格字元可以出現在預處理指令之前。預處理指令不是 c 語句,所以它們不會以分號 結尾。我們已經看到,之前所有的例項中都有 include指令。這個巨集用於把頭檔案包含到原始檔中。c 還支援很多預處理...