Як згадувалось у багатьох моїх попередніх питаннях, я працюю через 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__);
і неявно побудувати весь рядок відразу.