Warum? Was genau soll denn diese "klare Trennung" sein?
Zwei Dinge sind dir hier offenbar noch nicht klar:
1)
==, != , <, >, das sind alles ganz normale Operatoren, wie +, -, *, etc. Es gibt da keinen Unterschied.
2)
Es gibt auch keinen besonderen Zusammenhang zwischen dem if und diesen Operatoren. Dem if ist es völlig egal, was genau da in der Klammer steht. Zuerst wird der Ausdruck in der Klammer komplett ausgerechnet, und für das if ist dann nur das Endergebnis dieser Berechnung von Interesse. Nämlich ob es 0 oder nicht 0 ist.
Bei deiner Zeile stehen also einfach nur drei Operanden mit zwei Operatoren dazwischen:Da es keine Klammern gibt, regelt die Operator-Precedence in welcher Reihenfolge das ausgewertet wird. Und da der ==-Operator eine höhere Präzedenz hat (man kann auch sagen: bindet stärker) wird zuerst der Vergleich B == C ausgewertet. Das Ergebnis davon wird dann an A zugewiesen. Und das Ergebnis der Zuweisung ist dann das, was das if auswertet. Das Ergebnis des ==-Operators ist übrigens ein Integer, der entweder 0 (nicht gleich) oder 1 (gleich) ist. Und daher auch die Warnung: dem Pointer A wird ein Integer (Ergebnis von B == C) zugewiesen.Code:A = B == C
Lesezeichen