Frage

Das folgende Snippet sollte den Wert von Projekt zu übernehmen (im Makefile definiert) und erstellen Sie einen Dateinamen enthalten. Zum Beispiel, wenn PROJECT = Klassifikator, dann sollte es am Ende erzeugt classifier_ir.h für PROJECTINCSTR

Ich finde, dass dieser Code funktioniert, solange ich nicht versuchen, einen Unterstrich in dem Suffix zu verwenden. Jedoch ist die Verwendung des Unterstrichs ist nicht optional - in unserem Code-Basis nutzt sie überall. Ich kann dieses Problem umgehen, da es nur eine begrenzte Anzahl von Werten für PROJECT ist, aber ich würde gerne wissen, wie den folgenden Code-Schnipsel machen tatsächlich funktioniere, mit dem Unterstrich. Kann es entwertet werden?

#define PROJECT classifier

#define QMAKESTR(x) #x
#define MAKESTR(x) QMAKESTR(x)
#define MAKEINC(x) x ## _ir.h
#define PROJECTINC MAKEINC(PROJECT)
#define PROJECTINCSTR MAKESTR(PROJECTINC)

#include PROJECTINCSTR

Edit: Der Compiler sollte versuchen classifier_ir.h enthalten, nicht PROJECT_ir.h

.
War es hilfreich?

Lösung

#define QMAKESTR(x) #x
#define MAKESTR(x) QMAKESTR(x)
#define SMASH(x,y) x##y
#define MAKEINC(x) SMASH(x,_ir.h)
#define PROJECTINC MAKEINC(PROJECT)
#define PROJECTINCSTR MAKESTR(PROJECTINC)

Andere Tipps

Dies funktioniert für mich:

#define QMAKESTR(x) #x
#define MAKESTR(x) QMAKESTR(x)
#define MAKEINC(x) x ## _ir.h
#define PROJECTINC(x) MAKEINC(x)
#define PROJECTINCSTR MAKESTR(PROJECTINC(PROJECT))

#include PROJECTINCSTR

Das Barebone Beispiel arbeitet mit gcc (V4.1.2) und versucht, schließen "PROJECT_ir.h"

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top