Из того, что я прочитал, я понимаю, что оператор #
используется с параметрическим макросом для преобразования его параметра в строку, а ##
используется для объединения двух параметров или параметра с каким-либо другим идентификатором (Поправьте меня, если мой понимание неверно).
Но как я могу одновременно использовать операторы #
и ##
? Я попробовал это сделать:
#define str(n) #n ## #n
Я думал тогда
printf("%s",str(Hello))
будет расширен как
printf("%s", "Hello""Hello")
И так как смежные строки автоматически объединяются, чтобы создать одну строку в C, то это приведет к printf("%s", "HelloHello")
, а результат будет HelloHello
. Но история была другая, она выдает ошибку:
вставка "привет" и "привет" не дает действительный токен предварительной обработки
Пожалуйста, объясните мне, как расширяются эти параметрические макросы с операторами #
и ##
.