2016-08-16 3 views
-1

Von der C-Programmiersprache, die von KRCVerkettung von zwei Zeichenfolgen in eine in C

der Definition

#define tempfile(dir) #dir "%s" 

der Makroaufruf tempfile (/ usr/tmp) ergibt

"/usr/tmp" "%s" 

, die anschließend zu einer einzigen Zeichenfolge verkettet werden.

Auf welche Regel folgt die Verkettung der beiden Strings am Ende?

Ist die Regel für Makros in der Vorverarbeitung oder für Zeichenfolgen in C in Kompilierung?

Antwort

3

Dies geschieht nach einer der Phasen der Übersetzung.

Zitiert C11, Kapitel §5.1.1.2/P1.4 und P1.6, (entsprechend der Reihenfolge)

Preprocessing Richtlinien ausgeführt werden, werden Makroaufrufe erweitert und _Pragma unärer Operator Ausdrücke werden ausgeführt. [...]

und

Angrenzend Stringliteral Token sind verkettet.

+0

Ich würde hinzufügen, dass die Vorverarbeitung am Ende von Phase 4 beendet ist und Verkettung in Phase 6 passiert. Auch es ist Punkt 6 in Absatz 1, nicht Absatz 6. – user694733