Estoy leyendo el código fuente del phoneME. Es una implementación de FOSS JavaME. Está escrito en C++ y me encontré con este:¿Qué hace "#define STR (a) #a"?
// Makes a string of the argument (which is not macro-expanded)
#define STR(a) #a
sé C y C++, pero nunca he leído algo como esto. ¿Qué hace el #
en #a
?
También, en el mismo archivo, hay:
// Makes a string of the macro expansion of a
#define XSTR(a) STR(a)
Es decir, ¿cuál es el uso de la definición de una nueva macro, si todo lo que hace es llamar a una macro existente?
El código fuente está en https://phoneme.dev.java.net/source/browse/phoneme/releases/phoneme_feature-mr2-rel-b23/cldc/src/vm/share/utilities/GlobalDefinitions.hpp?rev=5525&view=markup. Puedes encontrarlo con CTRL + F.
Aparentemente esto (específicamente la combinación de las macros 'STR' y' XSTR') se llama el "truco de doble stringize". Hay una muy buena explicación en la pregunta [¿Cómo funciona exactamente el truco de doble cadena?] (http://stackoverflow.com/questions/2751870/how-exactly-does-the-double-stringize-trick-work) – sleske