精華區beta Programming 關於我們 聯絡資訊
※ 引述《leicheong (理昌)》之銘言: > ※ 引述《yyshan (布丁珍奶加椰果)》之銘言: > > 應該把宣告放在 header > > 定義放在模組之中 > > 這樣就不會有重覆定義的問題 > 這樣的話, 為何不直接用#define, 把overhead都集中到compile time > 呢? 原發問者已經說明理由了: #define 出的東西不會進入 symbol table, 所以 debug 的時候可是很麻煩的,尤其 header file 如果是另一個人 寫的情況。 而且 #define 不是 compiler 處理的,而是 preprocessor 處理的, 所以如果你錯誤地使用這個常數,compiler 給的訊息可能會很無助。 比如這個例子: #define PI 3.1415926 ... PI = 2.71828; compiler 不會告訴你「PI 是唯讀的」,而會說「invalid lvalue in assignment」,你可能要多花點時間才找到原來 PI 是常數值。 另外一些原因是使用 const 宣告的常數具有變數的性質,所以你可以對 它們取址、或是用 namespace/class/function 限制它們的 scope。而且 const 常數帶有型別資訊,配合 function overloading 時你才知道那個 函式會被呼叫到。這些都是 #define 做不到的。 最後,你不覺得 #define 才會讓體積變大嗎?比如說你在 header 中定義 了一個很大的字串,然後在許多不同的模組中使用它,這麼一來馬上就發生 你所說的重覆定義問題。 -- ※ Origin: SayYA 資訊站 <bbs.sayya.org> ◆ From: arisa.csie.org