#define是一個預處理器的宏定義語句。
比如定義一個常量
#define X 100
這樣呢,在代碼段中出現的任何X的地方都將替換成100
或者定義一個表達式
#define MAX(A, B) A > B ? A : B
使用:
MAX(2,3);//將返回3
MAX(2,3)其實被替換成了2 > 3 ? 2 : 3
還可以定義一個函數
#define FUN(A,B,C) void A##B(){std::cout<<#C<<std::endl;}
使用:
FUN(fun,123,test 123);
fun123();
在使用宏定義函數的時候呢,需要先調用宏來構造出函數,然后才能使用正確的函數名來輸出。
##的意思是將A和B連接起來,如果不使用##連接的話,那么函數名就會出現fun 123中間有個空格,這不是有效的c++函數,就會報錯。
#C的意思呢,就是把C轉換成有效的c++字符串字面量,這里如果不是用#,那么,在構造函數的時候就會導致編譯器不知道C是什么類型,導致未定義。
有時候這種宏定義會非常的長,可以把宏定義寫成好幾行來顯示
#define FUN(A,B,C) voi\
d A##B(){std::cout<<#C\
<<std::endl;}
只需要在每一個換行的地方插入一個‘\'就可以了
當然了,#define常用在C語言里,在C++里呢,也有一套解決方案,比如定義一個常量可以使用 const ,或者using,定義一個函數呢,可以使用模板。
#define呢就是一種替換,而且是一種無條件的替換,只有當被替換時才能檢查出語句是否有效,這種預處理器指令也是在編譯后就消失了,不存在於源文件中。
有人說#define已經過時了,但是我相信,每一個語句的出現,都必將是有意義的。你覺得呢?
感謝查閱,如若能幫到您,是我莫大的榮幸!