#include und Konstante?
-
Hallo,
wie kann ich folgendes machen:
ich habe:
#define MKT win32
nun möchte ich sowas wie
#include "MKT/test.hpp"
machen, doch so gehts das natürlich nicht. WIe würde es den gehen? soll halt am Ende sowas rauskommen:
#include "win32/test.hpp"
thx
-
#ifdef Win_32 #include "win32/test.hpp" #else /*...*/ #endif //Win_32
#ifdef Win_32 #define MKT "win32/" #else /*...*/ #endif //Win_32 #define TESTPATH MKT + "test.hpp" #include TESTPATH #undef TESTPATH
Geht denn
#include "win32/" + "test.hpp";
?
Wenn ja:#define MKT "win32/"; #include MKT + "test.hpp"
-
Leider gehen die vorgeschlagenen Ideen nicht
-
Nach meinen Versuchen setzt mir der Präprozessor Strings nicht automatisch zusammen. Wenn du irgendwie ein Makro zusammengebastelt bekommst, das 2 Strings aneinanderhängst, ist die Aufgabe ja schon gelöst.
Bis jetzt hab ich nur eine "Lösung":
#define FOO(a,b) <arch/a/b> #include FOO(i686,bar.h)
Mich würde aber trotzdem mal interessieren ob man irgendwie für die #include Direktive zwei Stringliterale zusammenhängen kann. Das hier funktioniert nicht wie gewünscht (zumindest mit nem aktuellen gcc):
#define FOO(a, b) a b #include FOO("test/", "bar.h")
Nach nem Präprozessorlauf kommt dabei das raus:
#include "test/" "bar.h"
und das führt zu der Fehlermeldung, dass er "test/" nicht findet
-
YASC schrieb:
Bis jetzt hab ich nur eine "Lösung":
#define FOO(a,b) <arch/a/b> #include FOO(i686,bar.h)
leider kann man das nicht auf #include "" umsetzen ... include "" sucht ja in den Pfaden von -I und <> nicht, oder?
MfG
-
Nein, innerhalb von Präprozessoranweisungen werden generell keine Makros ersetzt.
Das muss man so machen, wie von Rhombicosidodecahedron erster Vorschlag.
-
SeppJ schrieb:
Nein, innerhalb von Präprozessoranweisungen werden generell keine Makros ersetzt.
Das ist ne feige Lüge
#define STRINGIFY2(x) #x #define STRINGIFY(x) STRINGIFY2(x) #define ID(a) a #define TEST(a, b) STRINGIFY(ID(a)b) #include TEST(arch/i686/, types/ints.h)
Das expandiert zu:
#include "arch/i686/types/ints.h"
Leider kann man das nicht auf #include "" umsetzen ... include "" sucht ja in den Pfaden von -I und <> nicht, oder?
Bei mir sucht #include <> auch im Pfad den ich mit -I angegeben hab.
-
Danke!
YASC dein letzter Vorschlag funktioniert einwandfrei
thx,
mfg