Freigeben über


Operator (##) Token-Einfügen

DOUBLE-NUMBER signieren Token-Einfügen „oder“ Operator (##), zuweilen dem Namen „Zusammenführen“ des Operators aufgerufen wird, wird im OBJECT ähnlichen und FUNCTION ähnlichen Makros verwendet.Es ermöglicht unterschiedliche Token in ein einzelnes Token verknüpft werden und darf nicht das erste oder letzte Token in der Makrodefinition daher sein.

Wenn ein formaler Parameter einer Makrodefinition vom Operator Token-einfügenden vorangestellt oder folgt, wird der formalen Parameter vom sofort unexpanded übergebenen Parameter ersetzt.Makroerweiterung ist nicht auf dem Argument vor Ersetzung ausgeführt.

Anschließend wird jedes Vorkommen des Operators Token-einfügenden in Token STRING entfernt, und die Token, die ihm vorausgehen und folgen, werden verkettet.Das resultierende Token muss ein gültiges Token sein.Wenn dies der Fall ist, wird das Token möglichen Ersatz überprüft werden soll, ob es einen Makronamen darstellt.Der Bezeichner stellt den Namen dar, durch den die verketteten Token im Programm vor Ersetzung bekannt ist.Jedes Token stellt ein Token dar, das entweder an anderer Stelle innerhalb des Programms oder in der Compilerbefehlszeile definiert ist.Der Leerraum, die vor dem Operator oder ausführen, sind optional.

In diesem Beispiel wird dem Stringizings und des Token-Einfügens die Operatoren, die im ausgegebenen Programm angeben:

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

Wenn ein Makro mit einem numerischen Argument als aufgerufen wird

paster( 9 );

liefert das Makro

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

Dies wird

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

Beispiel

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

int main()
{
   paster(9);
}
  

Siehe auch

Referenz

Präprozessor-Operatoren