Jak wspomniano w wielu moich poprzednich pytaniach, pracuję przez K&R i obecnie używam preprocesora. Jedną z bardziej interesujących rzeczy - czymś, czego nigdy wcześniej nie wiedziałem z żadnej z moich poprzednich prób nauki C - jest ##
operator preprocesora. Według K&R:
Operator preprocesora
##
umożliwia konkatenację rzeczywistych argumentów podczas rozwijania makr. Jeśli parametr w zastępczym tekście sąsiaduje z a##
, parametr jest zastępowany przez rzeczywisty argument,##
biały znak i otaczający go odstęp są usuwane, a wynik jest ponownie skanowany. Na przykład makropaste
łączy dwa argumenty:
#define paste(front, back) front ## back
więc
paste(name, 1)
tworzy tokenname1
.
Jak i dlaczego ktoś miałby to wykorzystać w prawdziwym świecie? Jakie są praktyczne przykłady jego użycia i czy należy wziąć pod uwagę pewne kwestie?
std::wstring BuildDate = WIDEN(__DATE__) L" " WIDEN(__TIME__);
i niejawnie skompilować cały ciąg naraz.