#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


  • Mod

    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


Anmelden zum Antworten