1
的給出的以下的代碼:錯誤使用字串
#define MY_STRINGIFY_MACRO(...) #__VA_ARGS__
#define PORT_MAC(portNum) port: portNum
#define LOG_MACRO(...)
printf(MY_STRINGIFY_MACRO(__VA_ARGS__))
void func(int portNum)
{
LOG_MACRO(PORT_MAC(portNum)); /* In a more general way I would use this macro as LOG_MACRO(PORT_MAC(portNum), PORT_MAC(portNum1) ...); to get output of " port: 2, port: 3 ... "*/
}
當func()
調用與端口號,例如2
,輸出爲:
port: portNum
代替
port: 2
如果我用以下方式使用宏:
LOG_MACRO(PORT_MAC(2));
然後我得到所需的輸出:
port: 2
如何解決我的代碼,以便它可以處理這兩種情況下,輸出將始終包含portNum
價值?
'你唯一的選擇是在運行時在文本中替換'你能解釋一下嗎? – user2162550
你有一個'const char *'(你傳遞給'printf')。您需要將值手動替換(不要忘記先複製字符串,修改'const char *'可能會導致段錯誤)。另一種方法是調用'LOG_MACRO(PORT_MAC(%d),portNum)'。但是這意味着'LOG_MACRO'不允許使用'__VA_ARGS__'(因爲你需要將'__VA_ARGS__'傳遞給printf) – Ven