Warum ist das Folgende illegal in C?
%Vor%Nach meinem Buch ist das illegal, aber ich verstehe nicht warum.
In i++
wird der Wert von i
geändert. Nach der Ausführung ist i
der Wert eins plus der vorherige Wert. Sie können jedoch keinen Wert in w+x
speichern. Daher können Sie keine der folgenden Aktionen ausführen, die alle (wenn sie funktionieren) mehr oder weniger den gleichen Effekt haben würden:
Etwas, das auf der linken Seite einer Zuweisung platziert werden kann, wird normalerweise als lvalue bezeichnet ( l ist für links ). Die prägnante Art zu sagen ist, dass ++
nur auf lvalues angewendet werden kann und w+x
kein lvalue ist. Sie können mehr über lvalues (und andere Arten von Werten) in dieser Frage und ihren Antworten lesen:
Laut Dennis M. Ritchies Buch: "Die C-Programmiersprache" :
2.8 Operatoren zum Erhöhen und Verringern
(Seite 44)
Die Inkrement- und Dekrementoperatoren können nur auf Variablen angewendet werden; Ein Ausdruck wie
(i + j)++
ist illegal. Der Operand muss einmodifiable lvalue
des Arithmetik- oder Zeigertyps sein.
Weil ein Ausdruck
%Vor%entspricht:
%Vor%Also ein Ausdruck wie:
%Vor%Ähnliches wie:
%Vor%Das sieht weniger bedeutungsvoll aus, wir können den Ausdruck nicht ändern.
Related: Ein interessanter Fehler, den man in gcc 4.4.5 vielleicht wissen möchte, ist der Ausdruck j = ++(i | i);
kompiliert, der einen l-Wert Fehler erzeugen sollte. Lesen Sie: j = ++(i | i);
und j = ++(i & i);
sollte ein Fehler sein: lvalue?
Lesen Sie über modifizierbaren lvalue von (1) Expression muss ein modifizierbarer Lvalue-Fehler sein und (2) msdn docs: L-Werte und R-Werte
y = x++
gibt den Wert des Inkrements für die Variable x
zurück.
y = (x + z)++
schlägt fehl, weil (x + z)
KEINE Variable ist.
Es ist illegal, weil (w+x)
kein gültiger linker Wert ist.
Ein Wert auf der linken Seite ist ein Wert, der (I. E. einer Variablen) zugewiesen werden kann.
Dies ist illegal, weil (x+y)
keine Variable ist.
Betrachten Sie
a++
ist a = a + 1
(x+y)++
ist was? %Code%?