Re: [問題] 關於macro在程式碼中的位置
還是回一篇好了
你把兩個時間點混在一起了:
在我們叫起 compiler 幫我們編譯 source 時
首先會有一個 macro 置換的階段
(正式名稱叫「前處理階段」, preprocessing)
在這裡會處理所有的 # 開頭的 preprocessor directives
以及尋找其他地方有沒有因為 #define 而必須做字串代換的地方
這些全部處理完之後才進入編譯階段
才開始真正把程式編譯成執行檔
你的 PrintSum
當 #define DO_IT 在前面時 前處理階段中先看到了 #define
然後看到 #ifdef 發現有定義 所以把中間那一段加到實際編譯的程式當中
當前面沒有 #define DO_IT 時 (不管它在後面的哪裡)
前處理階段中看到 #ifdef 時發現沒有定義 所以就把中間那一段給丟掉
這也就是後面推文
→
09/11 15:23,
09/11 15:23
這句話的意思
也就是說 並不是到那裡時才去判斷有沒有定義
而是在送進編譯器之前時就決定有沒有它了
--
而你的用詞「『跑』到那裡」
這讓我覺得你又把編譯階段和執行階段兩個時間點又混在一起了
等於是你把三個在不同時間點做的事混在一起講
所以很難簡單的向你說你的問題在哪裡...
--
'You've sort of made up for it tonight,' said Harry. 'Getting the
sword. Finishing the Horcrux. Saving my life.'
'That makes me sound a lot cooler then I was,' Ron mumbled.
'Stuff like that always sounds cooler then it really was,' said
Harry. 'I've been trying to tell you that for years.'
-- Harry Potter and the Deathly Hollows, P.308
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.28.92
推
09/11 16:19, , 1F
09/11 16:19, 1F
推
09/11 16:41, , 2F
09/11 16:41, 2F
推
09/11 16:42, , 3F
09/11 16:42, 3F
→
09/11 16:42, , 4F
09/11 16:42, 4F
推
09/11 17:02, , 5F
09/11 17:02, 5F
推
09/13 21:16, , 6F
09/13 21:16, 6F
→
09/13 21:16, , 7F
09/13 21:16, 7F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 3 篇):