Partager via


Marque-Collant l'opérateur (##)

Le double-numéro-signe ou « jeton-coller » l'opérateur (##), parfois appelé « fusion » l'opérateur, est utilisé dans les macros comme un objet et comme une fonction.Il permet aux jetons séparés d'être joints dans un jeton unique et ne peut donc pas être le premier ou le dernier jeton dans la définition de macro.

Si un paramètre formel dans une définition de macro est précédé ou suivi de l'opérateur de collage de jeton, le paramètre formel est immédiatement remplacé par l'argument réel non-expansé.l'expansion macro n'est pas exécutée sur l'argument avant le remplacement.

Ensuite, chaque occurrence de l'opérateur de collage de jeton dans la jeton-chaîne est supprimée, et les jetons la précédent et suivant sont concaténés.Le jeton qui en résulte doit être un jeton non valide.Si la valeur est, le jeton est analysé pour le remplacement possible s'il représente un nom de macro.L'identificateur représente le nom par lequel les jetons concaténés sont connus dans le programme avant remplacement.Chaque jeton représente un jeton défini ailleurs, dans le programme ou sur la ligne de commande du compilateur.L'espace blanc précédent ou suivant l'opérateur est facultatif.

Cet exemple illustre l'utilisation d'opérateurs de transformation en chaîne et jeton-collants en spécifiant la sortie du programme :

#define paster( n ) printf_s( "token" #n " = %d", token##n )
int token9 = 9;

si une macro est appelée avec un argument numérique comme

paster( 9 );

cède de macro

printf_s( "token" "9" " = %d", token9 );

ce qui devient

printf_s( "token9 = %d", token9 );

Exemple

// preprocessor_token_pasting.cpp
#include <stdio.h>
#define paster( n ) printf_s( "token" #n " = %d", token##n )
int token9 = 9;

int main()
{
   paster(9);
}
  

Voir aussi

Référence

Opérateurs de préprocesseur