mit #define anweisung text ersetzen



  • Hallo,

    ich möchte mit einer

    #define AUFRUF
    

    Anweisung Text ersetzten.

    der Text mit, der mit der #define Anweisung lautet:

    int helpvariable;
     makroaufruf;
    

    Ich weiß leider nicht, wie ich das ganze Klammern soll.

    Danke



  • Und jetzt das Ganze bitte auf Deutsch: Was hast du genau vor?

    kurze Erklärung zu #define: Damit legst du ein Makro an, das der Präprozessor dann immer im Quelltext ersetzt. Ein #define AUFRUF test ersetzt jedes Vorkommen von 'AUFRUF' durch 'test' (wobei letzteres auch ein komplexerer Ausdruck sein könnte), #define AUFRUF(x) test+x ersetzt jedes 'AUFRUF(irgendwas)' durch 'test+irgendwas' (ebenfalls mit fast beliebig komplexen Ausdrücken möglich).



  • sorry 🙂

    also anstelle von test

    soll eine
    int variable; erzeugt werden und ein makro aufgerufen werden
    makro(variable);

    dabei geht es mir um die schreibweise, weiß net wie ich das Klammern soll.

    geht das so:

    #define makro_meins \
    { int variable;  makro(variable);  }
    

    ???

    Danke



  • Kommt ganz darauf an, was du vorhast (im größeren Kontext) - syntaktisch sieht der Code-Abschnitt korrekt aus (solange der Name 'makro' bekannt ist), semantisch müsste ich mehr über deine Anwendung wissen, um dieses Konstrukt einstufen zu können.



  • Im Inferface habe ich 2 Makros

    #define makro_interface_store \
    { int variable;  makro_store(variable);  }
    
    #define makro_interface_restore \
    makro_restore(variable)
    

    in einer anderen Datei, wird wiederum makro_store(variable) mit nem weiterem Erstatztext ersetzt.

    #define makro_store(variable) ("hier wird in die Variable gespeichert")
    
    #define makro_restore(variable) ("hier wird aus der Variable gelesen")
    

    Jetzt pienst sich der Compiler einen ab, wegen der Variablen. Die sei nicht definiert und zwar beim Aufruf von

    makro_interface_restore
    

    Aber eigentlich müsste er einfach nur den Text ersetzen somit steht letztendlich ("hier wird mit der Variable gearbeitet).

    Irgendwie raff ich nix 😕

    Grüße



  • Ja, der Präprozessor ersetzt auch nur den Text, allerdings inklusive der {} Klammern - und die markieren für den Compiler das Ende des Gültigkeitsbereiches für deinen 'int variable' (das heißt, wenn du die später nochmal brauchst, solltest du die Klammern weglassen).



  • danke,
    nehme ich dann die normalen Klammern anstelle der geschweiften???
    und setzte ich dei Semikolons???

    1.)

    #define makro_interface_store \
    (int variable;  makro_store(variable);)
    

    2.)

    #define makro_interface_store \
    (int variable;  makro_store(variable) )
    

    3.)

    #define makro_interface_store \
    int variable;  makro_store(variable)
    


  • schmitt schrieb:

    danke,
    nehme ich dann die normalen Klammern anstelle der geschweiften???

    Nein, du setzt überhaupt keine Klammern.

    und setzte ich dei Semikolons???

    In der Mitte ja, das letzte Semikolon vermutlich nicht (stört aber auch nicht, wenn es da ist:

    #define makro_interface_store int variable;makro_store(variable)
    

    (und achte darauf, daß du dieses Makro nur einmal pro Funktion einsetzt, sonst bekommst du Ärger wegen doppelten Variablen)


Anmelden zum Antworten