2012-02-25 60 views
6

Possible Duplicate:
Programmatic way to get variable name in C?¿Cómo imprimir el nombre de una variable en C++?

He revisado algunos de los blogs antes de publicarlos aquí. He intentado el siguiente fragmento ...

int a=21; 

int main() 
{ 
    cout<<#a<<a<<endl; 
    return 0; 
} 

estoy usando el compilador g ++ en Ubuntu 10.04. Y yo estoy recibiendo el siguiente error:

sample.cpp:17: error: stray ‘#’ in program. 

Por favor, me sugieren cómo imprimir el nombre de las variables.

+1

¿Por qué etiqueta C si usa 'g ++' y 'cout'? – cnicutar

+5

'cout <<" a "<< endl;' – ouah

+0

Vea http://stackoverflow.com/questions/1623111/programmatic-way-to-get-variable-name-in-c –

Respuesta

14

El # stringifying cosa macro sólo funciona dentro de las macros.

se podría hacer algo como esto:

#include <iostream> 

#define VNAME(x) #x 
#define VDUMP(x) std::cout << #x << " " << x << std::endl 

int main() 
{ 
    int i = 0; 
    std::cout << VNAME(i) << " " << i << std::endl; 

    VDUMP(i); 

    return 0; 
} 
+1

@JamesMcLaughlin - Pero usted puede hacer la macro más compleja. –

+3

@JamesMcLaughlin eso no es lo mismo: si cambia el nombre de su variable a 'j' y olvida actualizar la cadena' "i" ', no habría error en tiempo de compilación; El uso de la macro 'VNAME' en una * variable * garantiza que el valor impreso permanezca" sincronizado "con el nombre de la variable en tiempo de compilación. – dasblinkenlight

+1

@dasblinkenlight ¿Qué pasaría si cambiaras el nombre de tu variable a 'j' y existiera otra variable llamada' i'? No habría error de tiempo de compilación, y mostraría el nombre incorrecto. La macro 'VDUMP' que acaba de agregarse es mucho mejor. –

0

El # es porque si usted está escribiendo una macro.

Si su línea cout fuera una macro, funcionaría de la manera esperada.

Si no está en una macro, simplemente escriba "a".

Cuestiones relacionadas