事實上,對絕大多數編譯器來説,
#define N 10
和
const int N = 10;
是差不多的。
兩者都會在編譯時被實際替換爲字面值10。它們之間的差別,一是前者是在預處理階段執行,沒有語法檢查,也沒有類型檢查,後者在編譯階段執行,但有檢查。所以即使在古老的C++語言中,早就可以在後者那樣的情況定義數組int a[N],而C語言不行(在C99之後可以)。
兩者都是被實際替換爲常量值的事實,後者對一些喜歡玩“技術”的程序員來説,是一個深不見底的陷阱,當他們玩技巧把const數據强制取消const之後更改其值時,就極可能在這裏出錯(改了某處的數據但此常量並非僅在此處使用,即各處當時同名聲明的常量出現不一致),而這是在編碼上無法檢查出來的。編程規範警告“不要胡亂取消const”以及“鼓勵多用const”,很多自以爲是的“高手”不以爲然,信不信邪,當然是各人自便了。