Как упоминалось во многих моих предыдущих вопросах, я работаю через K&R, а сейчас занимаюсь препроцессором. Одна из наиболее интересных вещей - чего я никогда раньше не знал из своих предыдущих попыток изучить C - это ##
оператор препроцессора. Согласно K&R:
Оператор препроцессора
##
предоставляет способ объединения фактических аргументов во время раскрытия макроса. Если параметр в замещающем тексте находится рядом с a##
, параметр заменяется фактическим аргументом,##
удаляются и окружающие пробелы, а результат повторно просматривается. Например, макросpaste
объединяет два своих аргумента:
#define paste(front, back) front ## back
так
paste(name, 1)
создает токенname1
.
Как и зачем кому-то это использовать в реальном мире? Каковы практические примеры его использования и есть ли подводные камни, которые следует учитывать?
std::wstring BuildDate = WIDEN(__DATE__) L" " WIDEN(__TIME__);
и неявно построить сразу всю строку.