A primera vista, parece que escribir una macro en C que imprima su argumento es un juego de niños. El siguiente programa debería funcionar, es decir, debería imprimir x
c
#define PRINT(x) (x) int main() { printf("%s", PRINT(x)); return 0; }
Pero generaría un error de compilación porque se desconoce el tipo de datos de x , que el compilador toma como variable. Ahora no parece tan obvio. ¿no es así? Adivina qué, los siguientes tampoco funcionarán
c
#define PRINT(x) ('x') #define PRINT(x) ("x")
Pero si conocemos una de las características menos conocidas del lenguaje C, escribir una macro de este tipo es realmente un juego de niños. 🙂 En C, hay una directiva #, también llamada ‘Operador de string’, que hace esta magia. Básicamente, la directiva # convierte su argumento en una string. ¡Voila! es tan simple hacer el resto. Entonces, el programa anterior se puede modificar como se muestra a continuación.
c
#include <stdio.h> #define PRINT(x) (#x) int main() { printf("%s", PRINT(x)); return 0; }
Ahora, si la entrada es PRINT(x) , imprimiría x . De hecho, si la entrada es PRINT(geeks) , imprimiría geeks . Puede encontrar los detalles de esta directiva en el portal de Microsoft aquí .
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA