#Define 的用法 可以用在代碼替換,跟條件編譯
1.代碼替換
#define A 1000;
int s = A;//對於編譯器來說就是編譯的時候 編譯器看到那行會是 int s= 1000;
---------------------------------------------------------------------------------------------------
可以帶入參數
#define A(a,b) cout<<a,b;
A(a,b); // cout<<a,b;;
---------------------------------------------------------------------------------------------------
可以利用定義多行 來達到 寫函式的視覺效果(但實際上不是函式)
#define F(x) \
{\
if(x>100)\
{\
cout<<x;\
}\
}
---------------------------------------------------------------------------------------------------
2.條件編譯
#ifdef F_Test
//如果有定義F_Test的話 編譯這區塊
#else
//如果沒有定義F_Test的話 編譯這區塊
#endif
#ifndef
#define F_test
//可以確保這個區塊避免被重複定義
#endif
3.結論
(1) #define 就真的只是代碼的替換而已 ,就跟在記事本使用取代的功能很像(如果沒帶參數的話,就完全一樣),他的參數也是使用取代特性,
(2)#define跟函式差異最大的地方在於, 函式是佔有有實體空間的,函式有邏輯性
(3)函式不能重複定義,define可以,但要注意後蓋前
#define FX 200
#define FX 100
cout<<FX;
結果會是100
(4)好好利用後蓋前的特性的話,可以做到交叉比對,或是有效的Mark掉函式
void A(x){ cout<<x++;};
void B(x){};//空函式 等同於mark掉
#define A B
這時候你會發現只要是有include到這個define的A函式都會變成B函式
試想一下,假設你要暫時性的把所有A(X)都替換成B(X),選項一當然是使用全部取代的功能,
可是一來怕萬一將來又要改回來的話,二來怕取代的過程之中不小心手殘取代錯的話,
這時候可以利用#define來達到這個目的
沒有留言:
張貼留言