Come usare l’argomento Macro come stringa letterale?

Sto cercando di capire come scrivere una macro che passerà sia una rappresentazione letterale di stringa di un nome di variabile insieme alla variabile stessa in una funzione.

Ad esempio, data la seguente funzione.

void do_something(string name, int val) { cout << name << ": " << val << endl; } 

Vorrei scrivere una macro così posso farlo:

 int my_val = 5; CALL_DO_SOMETHING(my_val); 

Che stamperebbe: my_val: 5

Ho provato a fare quanto segue:

     #define CALL_DO_SOMETHING(VAR) do_something("VAR", VAR); 

    Tuttavia, come si può intuire, il VAR all’interno delle virgolette non viene sostituito, ma viene appena passato come stringa letterale “VAR”. Quindi mi piacerebbe sapere se c’è un modo per avere l’argomento macro trasformato in una stringa letterale stessa.

    Usa l’ operatore # del preprocessore:

     #define CALL_DO_SOMETHING(VAR) do_something(#VAR, VAR); 

    Vuoi usare l’operatore di stringizing:

     #define STRING(s) #s int main() { const char * cstr = STRING(abc); //cstr == "abc" } 
     #define NAME(x) printf("Hello " #x); main(){ NAME(Ian) } //will print: Hello Ian 

    Forse provi questa soluzione:

     #define QUANTIDISCHI 6 #define QUDI(x) #x #define QUdi(x) QUDI(x) . . . . . . unsigned char TheNumber[] = "QUANTIDISCHI = " QUdi(QUANTIDISCHI) "\n";