精華區beta Programming 關於我們 聯絡資訊
※ 引述《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