c++為了c也將它收進來。
c++的使用者,不一定是c高手,MARCO也就不一定用得好。
c++的使用者,不一定是c++高手,同上!XD
所以,MARCO用得讓人覺得程式怎麼愈寫愈....不開心。
是時有所聞~
MARCO包起來的,我認為是c語言時代的「程式碼片段」(比起翻譯成什麼「宏」來得好一點^^)
那麼要如何時用呢?
預防再次宣告(.h檔常用)
先看例子#ifndef MY_CLASS_H
#define MY_CLASS_H
class MyClass
{
//...
};
#endif
語法解釋
- #ifndef MY_CLASS_H 如果,還沒有定義過MyClass這個字
- #define MY_CLASS_H 定義MY_CLASS_H這個字
- #endif 結束MACRO的if
條件編譯
程式碼參考自C++ API Design Ch3 p.68
// autotimer.h
#ifdef _WIN32
#include
#else
#include
#endif
#include
class AutoTimer
{
//...
#ifdef _WIN32
DWORD mStartTime;
#else
struct timeval mStartTime;
#endif
};
語法解釋
- #ifdef _WIN32 如果定義了_WIN32
IDE會幫你在編譯時選定的一個參數。
也許是_DEBUG,指的是要進入debug模式。
取代參數化的容器初始化
在此,希望程式內部使用enum取代string。外部傳入string,在程式內部會置換成enum
enum AType
{
A1 = 0, A2, A3, ATotal
}
map<std::string,
AType> ATypeMap;
如果不使用MARCO,會麼寫。(也許有更好的寫法啦)
ATypeMap["A1test"] = A1;
ATypeMap["A2test"] = A2;
ATypeMap["A3test"] = A3;
如果使用MARCO,程式碼就可以這樣寫。
#define ADD_MAP(x) ATypeMap[#x test] = x
ADD_MAP(A1);
ADD_MAP(A2);
ADD_MAP(A3);
語法解釋
MARCO的參數[1]- 參數變成字串,參數前要加上#
- 參數變成字元,參數前要加上#@
- 參數要和唯讀字串組合成新字串,參數前要加上#,並和唯讀字串隔一個空白。
沒有留言:
張貼留言
(什麼是留言欄訊息?)