作者dybert ()
看板C_and_CPP
標題[問題] 一個Macro的問題(編譯期或執行期)
時間Sun Jul 5 21:35:42 2009
#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
1F:推 Ebergies:PREFIX_DRIVER_WIFI " " "Hello world" 這樣不是編譯期嗎 07/05 21:46
2F:推 williamyu:complie時就整個被替換掉了 07/05 21:48
3F:推 ckclark:preprocess 07/05 21:50
5F:→ kaichan:你就會發現這是 preprocess 的處理了 07/06 18:01