Compartir a través de


Operador de Símbolo- Pegado (##)

El operador de doble-número-signo o “en lugar” (##), que a veces se denomina “combinando” el operador, se utiliza en objeto-como y función-como macros.Permite que participan en los tokens separados en un único símbolo y por tanto no puede ser el primer o último símbolo en la definición de macro.

Si un parámetro formal en una definición de macro es precedido o seguido por el operador en lugar, el parámetro formal inmediatamente es sustituido por el argumento real sin expandir.La expansión de macro no se realiza en el argumento antes de reemplazo.

A continuación, cada aparición del operador) en lugar de símbolo-cadena se quita, y concatenan los tokens que la preceden y que siguen.El token resultante debe ser un token válido.Si es, el token se analiza para el reemplazo posible si representa un nombre de macro.El identificador representa el nombre el que conocerán los tokens concatenados en el programa antes de reemplazo.Cada símbolo representa un definido simbólico a otra parte, dentro del programa o en la línea de comandos del compilador.El espacio en blanco que precede o que sigue al operador es opcional.

Este ejemplo muestra el uso de los operadores el de generación de cadenas y) en lugar de que especifican el programa generado:

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

Si una macro lleva un argumento numérico como

paster( 9 );

la macro provoca

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

qué se convierte

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

Ejemplo

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

int main()
{
   paster(9);
}
  

Vea también

Referencia

Operadores de preprocesador