[問題] 一個Macro的問題(編譯期或執行期)

看板C_and_CPP作者時間15年前 (2009/07/05 21:35), 編輯推噓4(401)
留言5則, 4人參與, 最新討論串1/1
#define DRIVER_WIFI 3 #define PREFIX_DRIVER_WIFI "[D:WIFI]" void msg(char* str) { printf(str); } #define MSG(mode, fmt) \ { \ msg(PREFIX_##mode " " fmt); \ } \ int main() { MSG(DRIVER_WIFI, "Hello world"); return 0; } 請問一下,最後會印出 [D:WIFI] Hello world, 那這個字串應該是完全在編譯期就決定好的吧? 還是說編譯期只決定了字串由PREFIX_DRIVER_WIFI " " "Hello world"組成, 最後在執行期才變成[D:WIFI] Hello world? 感謝指點.... -- 閉上眼睛 我看見過去 張開眼睛 我看見未來 只是那些看不見的 依舊存在 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.42.170.234

07/05 21:46, , 1F
PREFIX_DRIVER_WIFI " " "Hello world" 這樣不是編譯期嗎
07/05 21:46, 1F

07/05 21:48, , 2F
complie時就整個被替換掉了
07/05 21:48, 2F

07/05 21:50, , 3F
preprocess
07/05 21:50, 3F

07/06 18:01, , 4F
http://pastebin.com/m139190af 你的code使用 gcc -E 來看
07/06 18:01, 4F

07/06 18:01, , 5F
你就會發現這是 preprocess 的處理了
07/06 18:01, 5F
文章代碼(AID): #1AKAmmHC (C_and_CPP)