鑑於下面的代碼,打印一個字符串,它是兩個詞的字符串化:字串宏總是添加單個空格字符
#define PORT_INFO_MAC_2(portNum) port: portNum
#define PORT_INFO_MAC(portNum) PORT_INFO_MAC_2(portNum)
/* Stringify macro expansion instead of the macro itself */
#define INVOKE_MACRO(...) #__VA_ARGS__
printf(" %s " , INVOKE_MACRO(PORT_INFO_MAC(1))); /* In a more general way, I'll be using it like follows: INVOKE_MACRO(PORT_INFO_MAC(2), PORT_INFO_MAC(1), ...) */
輸出始終" port: 1 "
與"port"
和"1"
之間的單個空間。爲什麼總是有一個空間,有沒有辦法控制空間的數量?
更改PORT_INFO_MAC_2
宏之間的空格量port
和portNum
之間的宏不會更改輸出空間量。
編輯
看來,有兩種情況,在拳情況下,port
和portNum
是closest- PORT_INFO_MAC_2(portNum) port:portNum
然後沒有空間在他們之間的輸出存在。在第二種情況下,它們之間的宏中存在任意數量的空格,輸出中空格的數量總是爲1. 對此有任何正式的解釋嗎?是否有任何控制權?
注意:「空格鍵」是鍵盤上生成_space_字符的大按鈕。 – Olaf