Учитывая следующий код, который печатает строку, которая представляет собой преобразование двух слов:
#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
являются ближайшими - PORT_INFO_MAC_2(portNum) port:portNum
, тогда между ними нет пробела в выводе. Во втором случае, когда в макросе между ними существует любое количество пробелов, количество пробелов в выводе всегда равно 1. Есть ли этому какое-то формальное объяснение? Есть ли какой-то контроль над этим?