Operadores # y ## en C

Operador de encadenamiento (#)

El operador de encadenamiento (#) es un operador de preprocesador que hace que el argumento real correspondiente se incluya en comillas dobles. El operador #, que generalmente se denomina encordar operador, convierte el argumento que precede en un cadena citada . También se le conoce como operador de encadenamiento.

Generalmente se usa con macros en C.

Ejemplo

El siguiente código C demuestra el uso del operador Stringizing (#).

C




Producción

geeksforgeeks 

Explicación

El siguiente preprocesador convierte la línea printf(mkstr(geeksforgeeks)); en printf(geeksforgeeks);

Operador de pegado de tokens (##)

El Operador de pegado de tokens (##) permite concatenar tokens utilizados como argumentos reales para formar otros tokens. A menudo resulta útil fusionar dos tokens en uno mientras se expanden las macros. Esto se denomina pegado de tokens o concatenación de tokens.

El operador de preprocesamiento '##' realiza el pegado de tokens. Cuando se expande una macro, los dos tokens a cada lado de cada operador '##' se combinan en un solo token, que luego reemplaza el '##' y los dos tokens originales en la macro expansión.

Ejemplos

El siguiente código C demuestra el uso del operador de pegado de tokens (##).

C




// C program to illustrate (##) operator> #include> > // Macro definition using the Token-pasting operator> #define concat(a, b) a##b> int> main(> void> )> {> > int> xy = 30;> > > // Printing the concatenated value of x and y> > printf> (> '%d'> , concat(x, y));> > return> 0;> }>

Producción

30 

Explicación

El preprocesador transforma printf(%d, concat(x, y)); en printf(%d, xy);

Aplicación del operador de pegado de tokens (##)

## proporciona una forma de concatenar argumentos reales durante la expansión de la macro. Si un parámetro en el texto de reemplazo es adyacente a ##, el parámetro se reemplaza por el argumento real, el ## y el espacio en blanco circundante se eliminan y el resultado se vuelve a escanear.