Sdílet prostřednictvím


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)

Viz také

Referenční dokumentace

Operátory preprocesoru