Macro que imprime una expresión y la evalúa (con __tring)
-
22-08-2019 - |
Pregunta
Para aprender y demostrar, necesito una macro que imprima su parámetro y lo evalúa. Sospecho que es un caso muy común, puede ser incluso una pregunta frecuente, pero no puedo encontrar referencias reales.
Mi código actual es:
#define PRINT(expr) (fprintf(stdout, "%s -> %d\n", __STRING(expr), (expr)))
y entonces:
PRINT(x & 0x01);
Funciona bien, pero no estoy seguro del estado legal de la macro __string, especialmente ya que está en el espacio de nombres privado __.
Entonces, mis preguntas:
- ¿Hay una mejor manera de escribir esta macro?
- ¿Es el string estándar/grandioso/malvado?
- ¿Cómo usar las herramientas de búsqueda existentes para encontrar sobre __string? El motor de búsqueda así solo busca cualquier cosa que contenga una cadena :-(
Solución
Puede usar el token de preprocesador # que convierte su argumento RHS en una cadena literal:
#include <stdlib.h>
#include <stdio.h>
#define STR(x) #x
#define PRINT(expr) (fprintf(stdout, "%s -> %d\n", STR(expr), (expr)))
int main(void)
{
int x = 7;
PRINT(x & 0x01);
return EXIT_SUCCESS;
}
2) Definitivamente no es estándar, y esta es la primera vez que lo encuentro; No es sorprendente, ya que no parece hacer mucho más que la macro STR () anterior, a primera vista.
3) Google parece funcionar bien.
Otros consejos
Algo como
#define PRINT(expr) (fprintf(stdout, "%s -> %d\n", #expr, (expr)))
es probablemente lo que quieres. # es el operador de ctriz.