Makro-Schwierigkeiten



  • Hallo,
    ich versuche gerade, mir ein Makro zu definieren, jedoch bekomme ich eine Fehlermeldung, wenn ich es nutzen möchte:

    #define _FIND_POS(a , b , c , d , e) ((a) = _file_searchnext((b) , (c) , (d)); if((a) == NULL) {(e)= 0;break;})
    ...
    _FIND_POS(fpos , searchbuffer , 0 , input , schalter);
    ...
    

    Die Fehlermeldung ist foglende: "Expected ')' before ';' token."

    Leider sind meine Erfahrungen mit Makros sehr begrenzt, es wäre nett, wenn mir jemand hier auf die Sprünge helfen könnte.



  • den stört wahrscheinlich die klammer um die if abfrage



  • Da ist keine Klammer um die Abfrage, oder? Nur die normale Klammer, die die Bedingung eingrenzt und dann die geschweifte Klammer, die den Code-Block umrahmt. Oder meinst du letztere? Die kann ich ja nicht einfach weglassen. 😕



  • ich meine die äusserste klammer



  • Wow, ich danke dir - jetzt kompiliert er zumindest den Code. Ob es funktioniert werde ich aber erst in später erfahren ;). Ich habe meine Makros bisher immer eingeklammert, weil ich dachte, dass sie sonst womöglich nicht korrekt eingefügt werden. Bisher bin ich da auch noch nicht gegen die Wand gelaufen :).

    Also nochmal danke, ich mache dann weiter.



  • Stiefel2000 schrieb:

    Wow, ich danke dir - jetzt kompiliert er zumindest den Code. Ob es funktioniert werde ich aber erst in später erfahren ;). Ich habe meine Makros bisher immer eingeklammert, weil ich dachte, dass sie sonst womöglich nicht korrekt eingefügt werden. Bisher bin ich da auch noch nicht gegen die Wand gelaufen :).

    Also nochmal danke, ich mache dann weiter.

    Übrigens musst du dein Makro nicht zwangsläufig in eine einzige Zeile quetschen und damit die Lesbarkeit aufheben.
    Stattdessen kannst du es auf mehrere Zeilen verteilen. Dazu einfach \ nutzen.



  • Danke, das war auch ein wertvoller Tipp. Ich vermute mal, das sieht dann so aus:

    #define _FIND_POS(a , b , c , d , e) (a) = _file_searchnext((b) , (c) , (d));
    \if((a) == NULL) {(e)= 0;break;}
    

    Oder kommt der Backslash in die obere Zeile?

    Das Programm läuft jetzt auch, es hat also alles funktioniert. Demnächst weiß ich ja dann, wo der Fehler liegt, wenn das wieder passiert ;).



  • Stiefel2000 schrieb:

    Danke, das war auch ein wertvoller Tipp. Ich vermute mal, das sieht dann so aus:

    #define _FIND_POS(a , b , c , d , e) (a) = _file_searchnext((b) , (c) , (d));
    \if((a) == NULL) {(e)= 0;break;}
    

    Oder kommt der Backslash in die obere Zeile?

    Das Programm läuft jetzt auch, es hat also alles funktioniert. Demnächst weiß ich ja dann, wo der Fehler liegt, wenn das wieder passiert ;).

    Ich denke, der Backslash kommt ans Ende der oberen Zeile. Am Besten probierst du es einfach aus 🙂


Anmelden zum Antworten