※ 引述《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