精華區beta Programming 關於我們 聯絡資訊
※ 引述《leicheong (理昌)》之銘言: > ※ 引述《yyshan (布丁珍奶加椰果)》之銘言: > > 最後,你不覺得 #define 才會讓體積變大嗎?比如說你在 header 中定義 > > 了一個很大的字串,然後在許多不同的模組中使用它,這麼一來馬上就發生 > > 你所說的重覆定義問題。 > 如果寫header的人沒有正確使用#ifndef的話, 是會有重覆定義. > 不過這也只是使用者使用失當而已. 這和 #ifndef 一點關係也沒有 就算用 #ifndef 還是一樣 只要某個模組用到它 就必須存一份它的複本 > 事實上你所舉的例子也是用const比較方便debug吧, 這點我也同意. > 不過為效能著想, 也建議在debug完成後把這些const宣告換回#define. 我反對 第一個理由是 const 和 #define 有許多本質上的差別 直接換下去只會讓你的 debug 時間倍增 其它理由下面再說 > 至於你最後舉的問題, 這涉及#define的內容: > - 如果#define的內容是primitive type(byte, int, long等), #define > 的空間使用和執行效能是必定高於const的. > - 如果#define的內容是string的話, 才會出現你說的情況. 不過也只是 > 體積增大了, 不會影響執行效能. (忽略loading time的話) 第二點就錯了 體積增大會使 cache hit rate 降低 > 如原發文者最初打算那樣, 把全部#define換成const的話, 結果肯定是 > 弊多於利的. 最簡單的問題 你覺得你寫一支程式以後 就永遠不會再改它嗎? 大部分情況是會吧! 當你要加新功能時就須要 debug 了 這時候你還要把 #define 全部換回 const 嗎? 真想要讓程式變快 應該先考慮標準的做法:profiling 然後針對最花時間的部分進行最佳化 而且通常先從演算法的層次開始 像 const/#define 之間的效能差異實在太小 一般人根本不會為了這樣的差異 去犧牲程式的維護性 > btw, 其實在primitive type的時候, enum關鍵字也提供了另一種選擇. 遇到 float/double 就沒用了 若真的那麼在意那一點點效能 用傳回常數值的 inline function 也比 #define 要好 -- ※ Origin: SayYA 資訊站 <bbs.sayya.org> ◆ From: arisa.csie.org ◆ Modify: 06/05/08 16:04:07 <arisa.csie.org>