prioritäten - wie tickt der compiler?



  • hi,
    man sieht ja öfter mal

    *dst++ = *src++;
    

    z.b. in string-kopierfunktionen.

    wie 'denkt' der compiler dabei? der dereferenzierungs-operator * hat
    laut http://info.baeumle-courth.eu/c04.html
    die gleiche priorität wie der inkrementierungs-operator ++
    wieso klappt das kopieren, warum wird erst zugewiesen und dann inkrementiert und
    nicht erst inkrementiert und dann zugewiesen?
    😕



  • Da steht: von rechts nach links
    Also wird erst beide mal ++ ausgewertet und dann erst beide mal * und dann erst =, weil = noch schwächer ist.
    Aber der Seiteneffekt von ++ , nämlich das Inkrementieren, wird erst nach der (ersten) Auswerrtung ausgeführt. Das ist die Eigenschaft der Postinkrementoperatore.
    Anders wäre es mit

    *++dst = *++src;
    

    Gleiche AUswertungsreihenfolge. Aber der Seiteneffekt würde vor dem Auswerten geschehen.



  • Erstens ist diese Liste nicht ganz komplett - es gibt zwei Inkrement-Operatoren und der hier verwendete Postfix-Inkrement hat eine höhere Priorität als die Dereferenzierung.

    Zweitens liefert der Post-Inkrement-Operator den alten Wert der betroffenen Variablen zurück - und dieser Wert wird anschließend dereferenziert.



  • ok nun ist es etwas klarer, danke euch beiden.
    🙂


Log in to reply