Operatore di per la creazione di stringhe (#)
Il numero-segno o l'operatore “per la creazione di stringhe („#) converte la macro parametri ai valori letterali stringa senza espandere la definizione di un parametro.Viene utilizzato solo con le macro che accetta argomenti.Se precede un parametro formale nella definizione macro, effettivo argomento passato dalla chiamata di macro è racchiuso tra virgolette e considerato come valore letterale stringa.Il valore letterale stringa viene quindi sostituisce tutte le occorrenze di una combinazione dell'operatore e il parametro formale per la creazione di stringhe nella definizione macro.
[!NOTA]
L'estensione Microsoft C# (versione 6,0 e precedenti) allo standard ANSI C che i valori letterali stringa di macro argomenti formali in precedenza espansi e le costanti carattere interni a partire non è più supportati.Codificare quello basato su questa estensione deve essere riscritto utilizzo di per la creazione di stringhe (#operatore).
Lo spazio vuoto che precede il primo token dell'argomento effettivo e dopo l'ultimo token dell'argomento effettivo viene ignorato.Tutti gli spazi vuoti tra i token nell'argomento effettivo viene ridotto a un singolo spazio vuoto del valore letterale stringa risultante.Pertanto, se un commento si verifica tra due token nell'argomento effettivo, viene ridotta a un singolo spazio vuoto.Il valore letterale stringa risultante viene concatenato con tutti i valori letterali stringa adiacenti da cui viene separato solo da spazi.
Inoltre, se un carattere contenuto nell'argomento richiede in genere una sequenza di escape se utilizzato in un valore letterale stringa, ad esempio le virgolette (“) o barra rovesciata (**\**il carattere), la barra rovesciata necessaria di escape viene automaticamente inserito prima del carattere.
Visual C++ che per la creazione di stringhe l'operatore non può comportarsi come previsto in tutte le situazioni, vedere 16.3.2 # Operatore per ulteriori informazioni.
Esempio
Nell'esempio seguente viene illustrata una definizione di macro che include l'operatore per la creazione di stringhe e una funzione principale che richiama la macro:
Tali chiamate verranno espanse durante la pre-elaborazione, scrivendo il codice seguente:
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" );
}
Di seguito viene illustrato come è possibile espandere una macro parametro:
// 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)