C++ Makros für C-Compiler?



  • Servus,

    die ersten C++ Implementierungen waren ja keine nativen Compiler, sondern nur Precompiler bzw. auch - soweit ich weiß - Makros für C-Compiler.

    Gibt es sowas noch irgendwo? Und funktionieren die dann auch mit jedem C-Compiler? Wenn ja, wo kann ich sowas downloaden?

    Es wäre praktisch, da es z.B. den cc65 gibt, ein reiner C-Compiler für den 6502, aber manchmal wäre es halt doch wünschenswert, mit C++ Syntax zu arbeiten.





  • Ahh cool 😉 vielen Dank!

    Also doch ein externer Precompiler. Wäre es überhaupt in Form von Makros möglich? Ich selbst würd sowas wahrscheinlich nicht hinkriegen, aber manche machen mit Makros ja die übelsten Sachen...



  • Mit Makros ist es eigentlich nicht moeglich. Man kann kleinigkeiten mit Makros machen: zB struct und class gleichsetzen aber sobald du funktionen innerhalb einer struct haben willst, koennen dir makros nicht mehr helfen.

    makros sind sehr dumme text ersetzungen. dumm im sinne von ersetzen 1 wort durch ein anderes. keine intelligenten matching algos ala regex.



  • Naja, eine Funktion innerhalb einer struct müßte halt eine Funktion sein, die als ersten Parameter einen Pointer auf die struct bekommt und alle this-Aufrufe müßten dann eben durch den Pointer ersetzt werden. Aber stimmt, das könnte mit Makros allein deshalb schon schwierig werden, weil die Klammern dann nicht mehr stimmen. Vielleicht könnte man da trotzdem tricksen, indem man halt dann vor jeder Funktion eine Klammer zu macht und danach wieder auf, sodaß aus:

    class Test
    {
       int a;
       int b;
       int getAPlusB();
    };
    
    struct Test
    {
       int a;
       int b;
    } int getAPlusB(Test* this); {
    };
    

    werden würde. Sieht halt dann nicht besonders schön aus 😉
    Naja, egal, werde mich mal mit Cfront ein bißchen beschäftigen...



  • Und wie genau packst du dass in ein Makro rein?



  • Hmmm... 😉

    Naja ich habe selbst noch nie Makros definiert (wenn man von normalen Konstanten absieht), daher weiß ich auch gar nicht, was nun genau alles möglich ist - in dem Fall vermute ich jedoch, daß es nicht geht, sonst hättest Du wohl nicht so gefragt 😉


Anmelden zum Antworten