2017-01-12 2 views
0

Ich frage mich, ob es einen Unterschied zwischen =+ und += (für diese und andere Zuweisungsoperatoren) gab. Ich habe es versucht und beide haben dasselbe gemacht. Gibt es einen Unterschied oder gibt es eine Konvention? Arbeiten beide, weil meine Compiler nicht nach Standards suchen?Was ist der Unterschied zwischen + = vs = + C Zuweisungsoperatoren

bearbeiten: Ich habe einen Fehler gemacht. Ich habe während meiner Tests schlechte Eingaben gemacht, was mich dazu gebracht hat zu denken, dass sie beide dasselbe machen. Es stellt sich heraus, dass es sich um zwei verschiedene Dinge handelt. Der Operator += fügt rvalue zu lvalue x = x + y hinzu. =+ weist den Wert rvalue einfach dem Wert x = +(y) zu.

+12

Es gibt keinen '= +' Operator in C. –

+0

@EugeneSh. Ja, aber es funktioniert. Also sollte ich es nicht benutzen? Es funktioniert nur zufällig in meinem Computer? – madkobra

+3

Ich arbeite als zwei verschiedene Betreiber. Zuweisung und unäres '+'. –

Antwort

4

In modernen C, oder sogar gemäßigt alten C, += ist eine Verbindung Zuweisungsoperator, und =+ wird als zwei separate Token analysiert. = und +. Interpunktionstoken dürfen benachbart sein.

Also, wenn Sie schreiben:

x += y; 

es

x = x + y; 

außer dass x gleichwertig ist nur einmal ausgewertet wird (die Rolle, wenn es ein komplizierter Ausdruck ist).

Wenn Sie schreiben:

x =+ y; 

dann ist es analysiert als

x = + y; 

und die + ist ein unärer Plus-Operator.

Sehr frühe Versionen von C (etwa Mitte der 1970er Jahre, vor der Veröffentlichung von K & R1 1978) verwendeten unterschiedliche Symbole für Verbindungszuordnungen. Wo modernes C += verwendet, verwendete früher C =+. Frühe C hatte keinen unären Operator +, aber es hatte einen unären - Operator, und die Verwendung von =- verursachte Probleme; Programmierer würden x=-y schreiben mit der Bedeutung x = -y, aber es wurde still als x =- y interpretiert. Die Sprache wurde einige Zeit vor 1978 geändert, um dieses Problem zu vermeiden. Noch 1999 arbeitete ich mit einem Compiler (VAXC on VMS), der vor einer mehrdeutigen Verwendung von =- warnen würde, würde aber die ältere Bedeutung verwenden. Das sollte jetzt kein Problem sein, es sei denn, Sie sind ein Hobbyspieler, der mit alter Software und/oder Hardware spielt.

Verwandte Themen