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:

  1. ¿Hay una mejor manera de escribir esta macro?
  2. ¿Es el string estándar/grandioso/malvado?
  3. ¿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 :-(
¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top