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.