繼續不斷地學習,不斷的回復自己的記憶

  • #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

參考資料:

 


Evan

Attitude is everything