動機

已經忘了當初是遇到什麼鍋,但是有留紀錄說要寫下來

macro(metaprogram) & program 的不同

macro是操作程式碼,所以程式碼不是所見及所得 * Macros have no namespace * Macros have effects you don’t realize & have strange side effects * Macros can’t be debugged * 沒有printf, gdb program是操作定義在program的資料,程式碼怎麼寫就怎麼動(不考慮side effect與system的鍋)

條件式編譯與ci

寫程式的可以自己定義條件式編譯,結果ci沒有跟上新加的編譯,導致ci沒有檢查到新的編譯,讓ci整個沒有用

解法

  1. 用enum, const
  2. 用function、與include、inline
  3. 把條件式編譯的參數拆成
    • 不同branch
    • 用設定檔讀參數

重點: macro中不能有business logic在