Stringizing (#) operátor
Znak čísla nebo operátor "stringizing" (#) převede makra parametry bez rozbalení definice parametru řetězcové literály.Používá se pouze s makry, argumenty.Pokud předchází parametru formální definice makra, je skutečná argumentem vyvolání makro v uvozovkách a jako řetězcový literál.Literál řetězce nahradí každý výskyt kombinaci stringizing operátor a formálních parametrů v rámci definice makra.
[!POZNÁMKA]
Rozšíření Microsoft C (verze 6.0 a starší) na ANSI C standard dříve rozbalený makro formální argumenty objevující se v řetězcové literály a znak konstanty není podporován.Kód, který se opírá o tomto prodloužení by mělo být přepsány pomocí stringizing (#) operátor.
Mezera před první token skutečné argumentu a poslední token skutečné argument je ignorován.Jakékoli prázdné místo mezi tokeny v argumentu skutečné sníží na jeden prázdný ve výsledné řetězcový literál.Tedy komentář dochází mezi dvěma tokeny v argumentu skutečné, se sníží na jeden prázdný.Výsledný řetězec literálu automaticky od jakékoli sousedící řetězcové literály, z nichž je oddělen pouze pomocí mezer.
Dále pokud vyžaduje obvykle obsažené v argumentu znak escape sekvenci v řetězcový literál (například uvozovky (") nebo zpětné lomítko (\) znak), nezbytné escape zpětného lomítka je automaticky vložena před znak.
Operátor stringizing Visual C++ může chovat dle očekávání ve všech situacích; Viz 16.3.2 Na # Operator Další informace.
Příklad
Následující příklad ukazuje definice makra, která zahrnuje stringizing operátor a hlavní funkce, která spustí makro:
Takové vyvolání by vytvořené při úpravě před zpracováním, vyrábějící následující kód:
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" );
}
Následující příklad ukazuje, jak můžete rozbalit parametru makra:
// 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)