Macro che stampa un'espressione e lo valuta (con __STRING)
-
22-08-2019 - |
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:
- C'è un modo migliore per scrivere questo macro?
- è __STRING Standard / grande / male?
- Come utilizzare gli strumenti di ricerca esistenti per trovare circa __STRING? così il motore di ricerca cerca solo tutto ciò che contiene stringa: - (
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.