Zeichenfolgenoperator (|)

Das Nummernzeichen oder „Operator“ stringizing (Parameter) umgewandelt**#**Makro in Zeichenfolgenliterale, ohne die Definition der Parameter zu erweitern.Sie wird nur mit Makros verwendet, die Argumente annehmen.Wenn sie einen formalen Parameter in der Makrodefinition vorangeht, ist der Parameter, der vom Makroaufruf übergeben wird, in Anführungszeichen eingeschlossen ist und als Zeichenfolgenliteral behandelt.Das Zeichenfolgenliteral ersetzt dann jedes Vorkommen einer Kombination des Operators stringizing und des formalen Parameters in der Makrodefinition.

HinweisHinweis

Die Erweiterung von Microsoft (C Version 6.0 und früher) zum erscheinende ANSI C-Standard, der vorher in Zeichenfolgenliterale der Makro formalen Argumente und Zeichenkonstanten erweiterte, wird nicht mehr unterstützt.Code, der auf dieser Erweiterung beruhte, sollte mithilfe des Operators stringizing (#-) umgeschrieben werden.

Der Leerraum, die dem Aktualparameters des ersten Tokens nach dem letzten und vor Aktualparameters des Tokens, werden ignoriert.Alle Leerzeichen zwischen den Token im übergebenen Parameter werden in einzelnen Leerraum im resultierenden Zeichenfolgen gewonnen literal reduziert.Wenn also ein Kommentar zwischen zwei Token im übergebenen Parameter auftritt, wird es in einzelnen Leerraum reduziert.Im resultierenden Zeichenfolgen gewonnen literal wird automatisch alle angrenzenden Zeichenfolgenliteralen verkettet, von denen sie nur durch Leerraum getrennt sind.

Darüber hinaus wenn ein Zeichen, das im Argument enthalten, wird normalerweise eine Escapesequenz erfordern, wenn sie in einem Zeichenfolgenliteral verwendet wird (z. B. das Anführungszeichen () oder umgekehrten Schrägstriche (\)), wird der erforderliche Escapezeichen umgekehrte schrägstrich automatisch vor dem Zeichen eingefügt.

Das Visual C++, das stringizing Operator ist, verhält sich erwartungsgemäß nicht in allen Fällen. Weitere Informationen finden Sie unter 16.3.2 | Operatoren .

Beispiel

Im folgenden Beispiel wird eine Makrodefinition an, die den stringizing Operator und eine main-Funktion enthalten, die das Makro ausgeführt:

Solche Aufrufe werden während des Präprozessorlaufs erweitert und führen würden den folgenden Code:

int main() {
   printf_s( "In quotes in the printf function call\n" "\n" );
   printf_s( "\"In quotes when printed to the screen\"\n" "\n" );
   printf_s( "\"This: \\\" prints an escaped double quote\"" "\n" );
}

// stringizer.cpp
#include <stdio.h>
#define stringer( x ) printf_s( #x "\n" )
int main() {
   stringer( In quotes in the printf function call ); 
   stringer( "In quotes when printed to the screen" );   
   stringer( "This: \"  prints an escaped double quote" );
}
  

Das folgende Beispiel zeigt, wie Sie einen Zeichenfolgenparameter Makro erweitert werden können:

// stringizer_2.cpp
// compile with: /E
#define F abc
#define B def
#define FB(arg) #arg
#define FB1(arg) FB(arg)
FB(F B)
FB1(F B)

Siehe auch

Referenz

Präprozessor-Operatoren