Hallo! Ich komme hier leider nicht klar mit Makro AV....



  • #define AV(x) ((x)>=o?(x+x):(x))
    int x=1;
    int erg=AV(x++);
    wenn AV(1) ist,dann kommt bei define wahr, also 1+1
    und was ist mit egr ????


  • Mod

    Makros sind reine, dumme Textersetzung durch den Präprozessor. Das heißt, bei dir sieht der Compiler (denn der Präprozessor kommt vor dem Compiler dran):

    int x = 1;
    int erg = ((x++) >= 0 ? (x+++x++) : (x++));
    

    Und das Ergebnis dieses Ausdrucks ist bekanntlich undefiniert ohne Ende.

    Dies ist einer der typischen Fallstricke von Makros. In C++ hast du keinerlei Grund, jemals Makros als Funktionsersatz zu benutzen. Und auch allgemein gibt es fast keine Gründe für Makronutzung in C++, außer Includeguards. Lass es einfach. Mit einer Funktion wäre dies nicht passiert.

    P.S.: Und achte bitte auf die Formatierung und (sinnentstellende) Rechtschreibfehler in deinen Beiträgen. Wie du siehst ist dein Beitrag praktisch unlesbar. Außerdem habe ich mal stillschweigend alle Fehler in deinem Code als Abtippfehler angesehen und korrigiert. Aber vielleicht waren das ja auch die Fehler, nach denen du gefragt hast. Was unklar ist, weil du keine richtige Frage stellst. Siehe dazu bitte den ersten und dritten Link in meiner Signatur.


Anmelden zum Antworten