macro literal dev define c++ c-preprocessor string-literals

dev - string literal c++



¿Cómo usar el argumento macro como cadena literal? (4)

Desea utilizar el operador de alineación:

#define STRING(s) #s int main() { const char * cstr = STRING(abc); //cstr == "abc" }

Estoy tratando de averiguar cómo escribir una macro que pase una representación literal de cadena de un nombre de variable junto con la variable en una función.

Por ejemplo dada la siguiente función.

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

Me gustaría escribir una macro para poder hacer esto:

int my_val = 5; CALL_DO_SOMETHING(my_val);

Que se imprimiría: my_val: 5

Intenté hacer lo siguiente:

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

Sin embargo, como puede adivinar, el VAR dentro de las comillas no se reemplaza, sino que se pasa como el literal de la cadena "VAR". Así que me gustaría saber si hay una manera de que el argumento macro se convierta en una cadena literal.


Quizás intentes esta solución:

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


Utilice el operador preprocesador # :

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


#define NAME(x) printf("Hello " #x); main(){ NAME(Ian) } //will print: Hello Ian