Domanda

Per l'apprendimento e la dimostrazione, ho bisogno di una macro che stampa il suo parametro e lo valuta. Ho il sospetto che si tratta di un caso molto comune, può essere anche una FAQ, ma non riesco a trovare i riferimenti attuali.

Il mio codice attuale è:

#define PRINT(expr) (fprintf(stdout, "%s -> %d\n", __STRING(expr), (expr)))

e poi:

PRINT(x & 0x01);

Funziona bene, ma non sono sicuro dello status giuridico della macro __STRING, specialmente dal momento che è nel namespace __ privato.

Quindi, le mie domande:

  1. C'è un modo migliore per scrivere questo macro?
  2. è __STRING Standard / grande / male?
  3. Come utilizzare gli strumenti di ricerca esistenti per trovare circa __STRING? così il motore di ricerca cerca solo tutto ciò che contiene stringa: - (
È stato utile?

Soluzione

È possibile utilizzare il token # preprocessore che converte il suo argomento RHS ad una stringa letterale:

#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) E 'sicuramente non è standard, e questa è la prima volta che ho incontrato esso; non è sorprendente in quanto non sembra fare molto di più che la macro STR () di cui sopra, a prima vista.

3) Google sembra funzionare bene.

Altri suggerimenti

Qualcosa di simile

#define PRINT(expr) (fprintf(stdout, "%s -> %d\n", #expr, (expr)))

è probabilmente quello che volete. # È l'operatore in stringa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top