Wie in vielen meiner vorherigen Fragen erwähnt, arbeite ich über K & R und bin derzeit im Präprozessor. Eines der interessanteren Dinge - etwas, das ich bei keinem meiner früheren Versuche, C zu lernen, zuvor gekannt habe - ist der ##
Präprozessor-Operator. Laut K & R:
Der Präprozessoroperator
##
bietet eine Möglichkeit, tatsächliche Argumente während der Makroerweiterung zu verketten. Wenn ein Parameter im Ersetzungstext neben a steht##
, wird der Parameter durch das eigentliche Argument ersetzt, der##
und der umgebende Leerraum werden entfernt und das Ergebnis wird erneut gescannt. Das Makropaste
verkettet beispielsweise seine beiden Argumente:
#define paste(front, back) front ## back
So
paste(name, 1)
entsteht das Tokenname1
.
Wie und warum sollte jemand dies in der realen Welt verwenden? Was sind praktische Beispiele für seine Verwendung und gibt es Fallstricke zu berücksichtigen?
std::wstring BuildDate = WIDEN(__DATE__) L" " WIDEN(__TIME__);
die gesamte Zeichenfolge reduzieren und implizit auf einmal erstellen.