C++替代巨集的功能實現的方法
阿新 • • 發佈:2019-01-08
在C++中,對於替代巨集的功能實現,我們通常見到的有三種方法:
1.常量用const來替代實現
類似於#define A 10,是在程式的預編譯期將所有的A用常量10替換掉,如果我們不想使用巨集,就可以用const int A=10替換之前的用法,這一步將會在程式編譯過程中將所有的A置為常量10,以此達到我們想要的目的。
2.有參巨集函式用inline(行內函數)來替換實現
巨集其實是在預編譯時期進行了程式碼的替換,其實就是把的所有的相關的地方替換上了所對應的程式碼,然後再進行編譯。而我們要想達到這樣的目的,可以使用行內函數,行內函數的程式碼本質是放在符號表中的,在要使用的時候進行替換,執行效率和巨集定義本質是一樣的,行內函數是編譯器首先在函式呼叫處使用函式體本身語句替換了函式呼叫語句,然後編譯替換後的程式碼。
3.型別用typedef替換實現
在巨集中,我們一般會這樣使用#define E int,在預編譯期時編譯期會將E簡單替換成int,如果要達到該目的,我們可以採用typedef int E;這一語句來實現,但是二者還是有一定差別,對於巨集來說,是在預編譯期對於出現的合適的字元進行簡單替換而不作正確性檢查,只有在程式編譯期才做檢查,而typedef不是簡單替換 ,而是採用如同定義變數的方法那樣來宣告一種型別,如果定義出錯,則會直接報錯。