C Programmierung: + = vs = +

8

Mein Professor und ich beschäftigen uns in C ein wenig mit dem Operator + =. Er sagt, dass + = oder = + funktionieren wird, aber er ist nicht sicher, warum = + funktioniert.

%Vor%

Die Ausgabe ergibt 4, 5, 6, 7, 8. Wenn Sie den + = Operator auf = + setzen, erhalten Sie die gleichen Ergebnisse. Jedoch - = macht nicht dasselbe wie = - (was offensichtlich ist, da es die 3 als 3 behandelt).

Also C Gurus:

  • Warum funktioniert das mit = +?
  • Wie behandelt ein C-Compiler = + gegen + =?
A Student 16.02.2011, 02:29
quelle

4 Antworten

22

Er ist falsch; += unterscheidet sich vollständig von =+ .

Der Ausdruck x =+ 3 wird als x = (+3) analysiert.
Hier wird + zum (unbrauchbaren) unären Operator + . (das Gegenteil der Verneinung)

Der Ausdruck x =- 3 wird unter Verwendung des unären Negationsoperators als x = (-3) analysiert.

    
SLaks 16.02.2011 02:32
quelle
14

Ihr Professor erinnert sich an alte Versionen von C, in denen =+ , =- , =* usw. tatsächlich dasselbe bedeuten wie += , -= , *= usw. (Wir reden hier älter als die Version, die allgemein als "K & amp; R" bezeichnet wird. Version 6 UNIX, wenn Speicher verwendet wird.)

In aktuellen Versionen von C bedeuten sie nicht dasselbe; Die Versionen mit dem Gleichheitszeichen werden zuerst analysiert, als ob zwischen den Gleichen und dem, was danach kommt, ein Leerzeichen steht. Dies erzeugt ein gültiges Programm (wenn auch nicht ein Programm, das das tut, was Sie erwarten) für =- und =+ , weil - und + als unäre Operatoren verwendet werden können.

=* oder =/ könnte verwendet werden, um das Argument zu klären. a *= 3 multipliziert a mit drei und a /= 3 teilt es mit drei, aber a =* 3 ist ein semantischer Fehler (weil unary * nur auf Zeiger angewendet werden kann) und a =/ 3 ist ein Syntaxfehler (Weil / nicht als unärer Operator verwendet werden kann.)

    
zwol 16.02.2011 02:36
quelle
3

Code

%Vor%

ergibt myArray[i] = myArray[i] + 3 + i;

während

%Vor%

ergibt myArray[i] = 3 + i

das ist, was ich habe.

    
ardiyu07 16.02.2011 02:35
quelle
1

+ ist auch ein unärer Operator wie - .

    
Novikov 16.02.2011 02:32
quelle

Tags und Links