2011-10-14 20 views
6

Sto provando a stampare su console utilizzando una macro il nome della variabile per visualizzare il valore dei membri durante il debug (registrazione). Come si fa? Ho provato quanto segue ma non funziona.nome variabile di stampa in un #define

#define MY_PRINT(x) std::cout << "'x'=" << x << std::endl; 

int main(){ 
    int my_variable=3; 
    MY_PRINT(my_variable); 
    // I would like to print to console 
    // 'my_variable'=3 
} 
+2

Definire "non funziona". Ho dovuto dirlo anche a te tante volte in passato, il che è un peccato. –

+0

Ciao Tomalek, per favore vedi la risposta qui sotto. È sufficiente aggiungere il carattere "#" –

+2

Sì, so qual è la risposta anch'io. Ma sto cercando di addestrarti, un po 'in ritardo, a scrivere domande adeguate. –

risposta

17

Auch ... Ho trovato la soluzione.

dovrei scrivere la macro come questo

#define MY_PRINT(x) std::cout << #x"=" << x << std::endl 
2

per C++ Io uso questo:

#define STR(x) #x << '=' << x 

int main() 
{ 
    int i = 1; 
    std::string str("hello"); 
    std::vector<std::string> vec; 
    my_class mc; 

    ... 

    std::cout << STR(i) << std::endl 
      << STR(str) << std::endl 
      << STR(vec) << std::endl 
      << STR(mc) << std::endl; 

    return 0; 
} 

In questo modo il compilatore sceglie l'operatore di streaming in base al tipo di dati, in modo da non lo fai c'è bisogno di preoccuparsi con diversi macro per ognuno, e può andare a qualsiasi std :: ostream, non solo std :: cout. Basta fornire l'operatore di streaming appropriato per i dati:

std::ostream operator<<(std::ostream&, const T&); 
std::ostream operator<<(std::ostream&, const std::vector<T>&); 
etc 

Ma mi piacerebbe che ci fosse un modo per sostituire il modello di macro, o almeno il nome della variabile fornito dal #x.

Problemi correlati