C-Präprozessor - # und ## Operatoren

Den C99-standard-Dokument hat das folgende Beispiel, in dem Abschnitt über die ## preprocessing-Betreiber:

Im folgenden fragment:

#define hash_hash # ## #
#define mkstr(a) # a
#define in_between(a) mkstr(a)
#define join(c, d) in_between(c hash_hash d)

char p[] = join(x, y); //equivalent to
                       //char p[] = "x ## y";

Den ausbau produziert, an verschiedenen
Stufen:

join(x, y)
in_between(x hash_hash y)
in_between(x ## y)
mkstr(x ## y)
"x ## y"

In anderen Worten, die Erweiterung hash_hash
erzeugt ein neues token, bestehend aus
zwei benachbarte scharfen Schildern, aber dieses neue
token ist nicht der # # - operator.

Ich verstehe nicht, warum die substitution von hash_hash produziert ## und nicht "##" oder "#""#". Welche Rolle werden die einzelnen Hashwerte vor und nach dem Doppel-hash-spielen?

Alle Antworten sehr dankbar.

  • single-hashes vor und nach ## sind nur chars, und ## (token) wird Ihnen in zwei Zeichen ## (nicht in token). nach der Anwendung eines mkstr Ihnen, Sie werden in eine Zeichenfolge konvertiert werden von "##"
InformationsquelleAutor deStrangis | 2011-07-06
Schreibe einen Kommentar