精華區beta Programming 關於我們 聯絡資訊
※ 引述《qrtt1 (foolish)》之銘言: > ※ 引述《tomhuang (阿培仔)》之銘言: > > 最近寫了個程式,裡面我用了滿多 #define 來宣告一些常數, > > 可是後來在 debug 時發現,#define 的常數沒辦法看到內容, > > 在 Linux 中的 gdb 可以用 macro exp SOME_CONSTANT 展開, > > 可是還是滿麻煩的,它只是展開而不做計算...所以看到一些 > > 四則運算式。 > > 後來我想到有聽人家講過,最好是用 const 來代替 #define, > > 現在想把程式做個翻修,把 #define 全換成 const。 > > 請問大家,要用 const 取代 #define 的話,一般是放在 header > > 裡面嗎?還是放在 *.c 裡面呢? > 您應該先思考scope要多大啊 > many file? > file? > function? 本來那些 #define 是寫在 .h 裡面的,所有的 .c 都會引入它, 剛剛試著把其中幾個,如: #define IN_WIDTH 320 #define IN_HEIGHT 240 #define BLEED_WIDTH 30 #define BLEED_HEIGHT 20 #define OUT_WIDTH (IN_WIDTH - BLEED_WIDTH * 2) #define OUT_HEIGHT (IN_HEIGHT - BLEED_HEIGHT * 2) 改成: typedef unsigned short u16; const u16 IN_WIDTH = 320; const u16 IN_HEIGHT = 24; const u16 BLEED_WIDTH = 30; const u16 BLEED_HEIGHT = 20; const u16 OUT_WIDTH = (IN_WIDTH - BLEED_WIDTH * 2); const u16 OUT_HEIGHT = (IN_HEIGHT - BLEED_HEIGHT * 2); 最後兩個有錯誤訊息: error: initializer element is not constant 可是把那幾行拷到 function 裡面,好像就沒有錯誤訊息... 是不是 global 和 local 的寫法不一樣呢? -- ※ Origin: SayYA 資訊站 <bbs.sayya.org> ◆ From: 140.124.70.251