Как упоминалось во многих моих предыдущих вопросах, я работаю через K & R, и в настоящее время я вхожу в препроцессор. Одна из наиболее интересных вещей — что-то, чего я никогда не знал ранее ни с одной из моих предыдущих попыток учиться. C — является оператором препроцессора ##
. Согласно K & R:Каковы приложения оператора препроцессора ## и gotchas для рассмотрения?
Препроцессор оператор
##
предоставляет способ для объединения фактических аргументов при макроподстановках. Если параметр в тексте замены является прилегающих к##
, параметр заменяется фактическим аргументом, то##
и окружающее пустое пространство будут удалены, и результат повторного сканирования. Например, макросpaste
конкатенации свои два аргумента:
#define paste(front, back) front ## back
так
paste(name, 1)
создает маркерname1
.
Как и почему кто-то использовал это в реальном мире? Каковы практические примеры его использования, и есть ли какие-то соображения?
Так как вы можете сцепить строковые литералы во время компиляции, можно привести выражение BuildDate в `станд :: wstring BuildDate = Виден (__DATE__) L "" WIDEN (__ TIME __); "и неявно построить всю строку сразу. – user666412 2016-02-15 17:54:19