精華區beta Programming 關於我們 聯絡資訊
※ 引述《yyshan (布丁珍奶加椰果)》之銘言: > ※ 引述《leicheong (理昌)》之銘言: > > 如果寫header的人沒有正確使用#ifndef的話, 是會有重覆定義. > > 不過這也只是使用者使用失當而已. > 這和 #ifndef 一點關係也沒有 > 就算用 #ifndef 還是一樣 > 只要某個模組用到它 > 就必須存一份它的複本 由於#define的宣告範圍是global的, 而且只是用來「取代」需要取代的 地方, 因此不存在複本的事. > > - 如果#define的內容是string的話, 才會出現你說的情況. 不過也只是 > > 體積增大了, 不會影響執行效能. (忽略loading time的話) > 第二點就錯了 體積增大會使 cache hit rate 降低 可是, instruction cache的cache miss絕對比data load instruction的 cache miss影響要嚴重得多. 還有, 我也不是要原發文者把const全改成#define. 我只要針對他想把source中的#define全換成const的想法發言罷. > > 如原發文者最初打算那樣, 把全部#define換成const的話, 結果肯定是 > > 弊多於利的. > 最簡單的問題 > 你覺得你寫一支程式以後 > 就永遠不會再改它嗎? > 大部分情況是會吧! 但改code/debug時已定義的const/#define label你通常可不會手癢跑去動吧? > 當你要加新功能時就須要 debug 了 > 這時候你還要把 #define 全部換回 const 嗎? 要用#define的都用#define define了, 還會換回來嗎? 我舉的只是針對他對debug時的不習慣提出的compromise吧. > 真想要讓程式變快 > 應該先考慮標準的做法:profiling > 然後針對最花時間的部分進行最佳化 > 而且通常先從演算法的層次開始 > 像 const/#define 之間的效能差異實在太小 > 一般人根本不會為了這樣的差異 我是不會特意去改, 正於我也不建議原發文者特意去改一樣. > 去犧牲程式的維護性 維護性... 嗎? 你認為#define是為了甚麼被創造出來的? 不是為了它的可讀性嗎? > 用傳回常數值的 inline function 也比 #define 要好 同意. 不過這不是討論的重點. -- ※ Origin: SayYA 資訊站 <bbs.sayya.org> ◆ From: n218103223121.netvigator.com