Opérateur de transformation en chaîne (#)
Le signe numérique ou l'opérateur de transformation en chaîne « » (#) convertit de macro paramètres des littéraux de chaîne sans développer la définition de paramètre.Il est utilisé uniquement avec les macros qui acceptent des arguments.S'il précède un paramètre formel dans la définition de macro, l'argument réel passé par l'appel de macro est entre guillemets et spécifié comme un littéral de chaîne.Le littéral de chaîne remplace chaque occurrence d'une combinaison de l'opérateur de transformation en chaîne et du paramètre formel dans la définition de macro.
[!REMARQUE]
L'extension Microsoft C (versions 6,0 et antérieures) à la norme C ANSI que de macro arguments formels précédemment développés apparaissant des littéraux de chaîne et les constantes caractère intérieurs n'est plus pris en charge.Le code qui a fié cette extension doit être réécrit à l'aide de l'opérateur de transformation en chaîne (#).
L'espace blanc qui précède le premier jeton de l'argument réel et après le dernier jeton de l'argument réel est ignoré.Tout espace blanc entre les jetons de l'argument réel est réduit à un espace blanc unique dans le littéral de chaîne résultante.Ainsi, si un commentaire se produit entre deux jetons de l'argument réel, il est réduit à un espace blanc unique.Le littéral de chaîne résultante est automatiquement concaténé à tous les littéraux de chaîne adjacents dont il se compose uniquement par l'espace blanc.
De plus, si un caractère contenu dans l'argument requiert généralement d'une séquence d'échappement lorsqu'il est utilisé dans un littéral de chaîne (par exemple, le guillemet (Liens Ignorer la navigation) ou caractère barre oblique inverse (\)), la barre oblique inverse nécessaire d'échappement est automatiquement insérée avant le caractère.
L'opérateur de transformation en chaîne Visual C++ peut ne pas se comporter comme prévu dans toutes les situations ; consultez 16.3.2 | Opérateur pour plus d'informations.
Exemple
L'exemple suivant illustre une définition de macro qui inclut l'opérateur de transformation en chaîne et une fonction principale qui appelle la macro :
De tels appels sont développés pendant le prétraitement, produisant ainsi le code suivant :
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" );
}
L'exemple suivant montre comment vous pouvez développer une macro paramètre :
// 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)