※ 引述《tomhuang (阿培仔)》之銘言:
> 最近寫了個程式,裡面我用了滿多 #define 來宣告一些常數,
> 可是後來在 debug 時發現,#define 的常數沒辦法看到內容,
> 在 Linux 中的 gdb 可以用 macro exp SOME_CONSTANT 展開,
> 可是還是滿麻煩的,它只是展開而不做計算...所以看到一些
> 四則運算式。
> 後來我想到有聽人家講過,最好是用 const 來代替 #define,
> 現在想把程式做個翻修,把 #define 全換成 const。
> 請問大家,要用 const 取代 #define 的話,一般是放在 header
> 裡面嗎?還是放在 *.c 裡面呢?
不要被別人誤導了.
#define定義的東西在編譯時會自動取代原碼檔中所有相關字串,
因此你在debug時看不到#define定義的值是非常正常的.
用const的話, 定義的值會佔一段記憶體, 再在執行期間使用時
才用mem pointer指向, 做成記憶體使用和實際執行效率上的penalty.
部了少數的compiler外, 在用const的方式的時候compiler甚至
會有每一個reference到該const的module都定義一次該const,
做成進一步的記憶體/模組空間浪費.
我不能想像當你把所有#define都換成const的時候, 你的執行
碼會「膨脹」多少.
--
在C++, 每一個關鍵字的出現都是有其理由的. 尤其是當你在內建
的header檔看到他們被大量使用的時候.
--
※ Origin: SayYA 資訊站 <bbs.sayya.org>
◆ From: ip-84-126-134-202.rev.dyxnet.com