Ich habe Lose auf stringizing Makros gelesen, aber ich verstehe offensichtlich nicht ganz. Ich möchte eine Zeichenfolge erstellen, bei der das Argument für das Makro zuerst ausgewertet werden muss. Kann mir bitte jemand erklären, wo ich falsch liege oder wie ich das vielleicht besser mache?C Stringize Ergebnis der Gleichung
#define SDDISK 2 // Note defined in a library file elsewhere ie not a constant I know)
#define DRIVE_STR(d) #d ":/"
#define xDRIVE_STR(x) DRIVE_STR(x)
#define FILEPATH(f) xDRIVE_STR(SDDISK + '0') #f
const char file[] = FILEPATH(test.log);
void main(void)
{
DebugPrint(file);
}
Die Ausgabe lautet: "2 + '0':/test.log",
Aber ich will "2: /test.log"
[Lassen Sie einfach die '+' 0''] fallen (http://ideone.com/n9UBZP). – Cornstalks
Warum hast du die '0' gesetzt, wenn du sie nicht willst? –
Makros werden vom Präprozessor erweitert. Der Präprozessor führt auch das Stringizing aus. Danach, wenn der Compiler den Code sieht, ist die '2' bereits in doppelten Anführungszeichen. Daher ist es nicht notwendig, "0" zu "2" hinzuzufügen, um es in das Zeichen "2" zu konvertieren. –