【发布时间】:2016-09-21 13:42:02
【问题描述】:
给定以下代码,它打印一个字符串,该字符串是两个单词的字符串化:
#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 和portNum 之间更改PORT_INFO_MAC_2 宏中的空格数量不会改变输出空间数量。
编辑
似乎有两种情况,在第一种情况下,port 和portNum 最接近-PORT_INFO_MAC_2(portNum) port:portNum,然后它们之间的输出中不存在空格。在第二种情况下,它们之间的宏中存在任意数量的空格,输出中的空格数量始终为 1。
对此有什么正式的解释吗?有什么控制权吗?
【问题讨论】:
-
注意:“空格键”是键盘上的大按钮,可生成空格字符。
标签: c gcc macros stringification