Sto leggendo il codice sorgente del telefono. È un'implementazione JavaME di FOSS. E 'scritto in C++, e ho inciampato su questo:Che cosa fa "#define STR (a) #a"?
// Makes a string of the argument (which is not macro-expanded)
#define STR(a) #a
So C e C++, ma non ho mai letto qualcosa di simile. Che cosa fa lo #
in #a
?
Inoltre, nello stesso file, c'è:
// Makes a string of the macro expansion of a
#define XSTR(a) STR(a)
Voglio dire, che cosa è l'uso di definire una nuova macro, se tutto ciò che fa è chiamare una macro esistente?
Il codice sorgente è 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. Puoi trovarlo con un CTRL + F.
Apparentemente questo (in particolare la combinazione delle macro 'STR' e' XSTR') è chiamato "double stringize trick". C'è una spiegazione molto buona nella domanda [Come, esattamente, funziona il trucco a doppia stringa?] (http://stackoverflow.com/questions/2751870/how-exact-does-the-double-stringize-trick-work) – sleske