繼續不斷地學習,不斷的回復自己的記憶
- #define 在compiler階段就會展開,所以要確認清楚他的展開方式,比如
#define M1(x) X5+3
M1(5)5 ==> 55+35 => (55)+(35) = 40
-
他可以不止一行~對於只有一行的if 判斷要小心 if(a) staement Macro(b) , Macro(b) b++; b—; 在此~ b–將會跑不到. 怕失誤要加上 {} 或是改成 inline function
-
參數有 # 會加上 escape character,也就是 “ —> ”
-
#define值並不會有值~也就是
#define FOO1
#ifdef FOO1
.. statement1
#endif
跟 if (FOO1 == 0) 是不同 (其實這樣會compiler error)
-
如果要#define 一個數字~要換成常數 (constant) exam: #define FOO 5.3
-
如果只有一個檔案要用,改成 static const FOO = 5.3;
-
多個檔案 extern const FOO= 5.3;
-
CPP裡面 const FOO=5.3;
-
-
當專案大的時候,由於 .h 會被很多的檔案載入~所以define macro 不建議放在 .h 容易被其他人用到(或是override)
-
建議寫在.c 或是 .cpp 並且在用完之後馬上 #undef 避免被蓋掉(override)
詳細code整理我放這裡: https://gist.github.com/kkdai/9014911
參考資料:
-
http://bbs.nsysu.edu.tw/txtVersion/treasure/program/M.855729774.C/M.948127113.E.html
-
http://web2.fg.tp.edu.tw/~cc/blog/wp-content/uploads/2010/06/20100715advanceC.pdf
-
Include guard about define http://en.wikipedia.org/wiki/Include_guard
-
9 Code Smells of Preprocessor Use http://qualitycoding.org/preprocessor/