在嵌入式開發裡,定義常數這件事做了幾萬次,但我敢說大多數人都沒有認真想過「這三種到底有什麼差別」。
反正 #define 能跑、const 也能用,切換狀態就 enum,好像各有各的場,不去想也沒事。
直到某次 code review,被人問了一句:「這裡為什麼用 #define 而不是 const?」
我愣了一下。說真的,我沒有理由,就只是習慣。
先說結論
不想看完可以直接記這個:
| 情境 | 建議 |
|---|---|
| 硬體暫存器位址、bit mask | #define |
| 有型別的常數值 | const |
| 一組互斥的狀態 / 選項 | enum |
| 條件編譯、平台切換 | #define |
| 陣列長度(C99 以後) | enum 或 const 均可,但 #define 最保險 |
但只知道結論沒什麼用,知道背後的理由才不會在邊緣情況翻車。