Je me demandais s'il y avait une différence entre =+
et +=
(et d'autres opérateurs d'affectation également). J'ai essayé et les deux ont fait la même chose. Y a-t-il donc une différence ou une convention? Les deux fonctionnent-ils parce que mes compilateurs ne vérifient pas les standards?
Edit: j'ai fait une erreur. J'ai utilisé de mauvaises entrées lors de mes tests, ce qui m'a amené à penser qu'ils faisaient tous les deux la même chose. Il s'avère que ce sont deux choses différentes.
+=
opérateur ajoute rvalue à lvalue
x += y;
x = x + y;
=+
simplement attribue rvalue à lvalue
x =+ y;
x = +y;
x = y;
En C moderne, ou même en C modérément ancien, +=
est un opérateur d'affectation composé, et =+
est analysé comme deux jetons distincts. =
et +
. Les jetons de ponctuation peuvent être adjacents.
Donc, si vous écrivez:
x += y;
c'est équivalent à
x = x + y;
sauf que x
n'est évalué qu'une seule fois (ce qui peut être important si c'est une expression plus compliquée).
Si vous écrivez:
x =+ y;
alors il est analysé comme
x = + y;
et le +
est un opérateur unaire plus.
Très les premières versions de C (vers le milieu des années 1970, avant la publication de K & R1 en 1978) utilisaient différents symboles pour les affectations composées. Où le C moderne utilise +=
, début C utilisé =+
. Début C n'avait pas unaire +
, mais il avait un unaire -
, et l'utilisation de =-
a causé des problèmes; les programmeurs écriraient x=-y
voulant dire x = -y
, mais il a été interprété en silence comme x =- y
. La langue a été modifiée quelque temps avant 1978 pour éviter ce problème. Pas plus tard qu'en 1999, j'ai travaillé avec un compilateur (VAXC sur VMS) qui avertissait d'une utilisation ambiguë de =-
, mais utiliserait l'ancien sens. Cela ne devrait plus être un problème à moins que vous ne soyez un amateur qui joue avec des très anciens logiciels et/ou matériels.