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