Je suis tombé sur =+
par opposition à la norme +=
aujourd'hui dans certains codes C; Je ne suis pas tout à fait sûr de ce qui se passe ici. Je ne pouvais pas non plus le trouver dans la documentation.
Réponses
Trop de publicités?Vous pouvez trouver des preuves de l'ancienne notation de la 7ème Édition du Manuel UNIX (Vol 2a) daté de janvier 1979, disponible en ligne à http://cm.bell-labs.com/7thEdMan/.
Le chapitre est intitulé"C Manuel de Référence"de Dennis M. Ritchie, et est dans la version PDF du manuel, mais pas dans la version HTML. Dans la partie pertinente, il dit:
7.14.1 lvalue = expression
La valeur de l'expression remplace celle de l'objet visé par la lvalue. Les opérandes n'ai pas besoin de l' même type, mais les deux doivent être de type int, char, float, double, ou un pointeur. Si aucun opérande est un pointeur, l'affectation se déroule comme prévu, éventuellement précédé par la conversion de l'expression à droite. Lorsque les deux opérandes sont de type int ou des pointeurs de toute nature, pas de conversion a lieu; la valeur de l'expression est simplement stockée dans l'objet visé par la lvalue. Ainsi, il est possible de générer des pointeurs qui sera la cause de l'adressage des exceptions lorsqu'il est utilisé.
7.14.2 lvalue =+ expression
7.14.3 lvalue =- expression
7.14.4 lvalue =* expression
7.14.5 lvalue =/ expression
7.14.6 lvalue =% expression
7.14.7 lvalue =>> expression
7.14.8 lvalue =<< expression
7.14.9 lvalue =& expression
7.14.10 lvalue =^ expression
7.14.11 lvalue = | expressionLe comportement d'une expression de la forme ‘E1 =op E2" peut être déduit en prenant comme équivalent à ‘E1 = E1 op E2"; cependant, E1 est évaluée qu'une seule fois. En outre, les expressions comme ‘i =+ p", dans lequel un pointeur est ajouté à un nombre entier, sont interdits.
Séparément, il y a un papier 'Évolution de C' par L Rosler dans le "SYSTÈME UNIX®: Lectures et Applications, Volume II", initialement publié par AT&T, comme leur Revue Technique pour le mois d'octobre 1984, plus tard publié en 1987 par Prentice Hall, (ISBN 0-13-939845-7). Une partie de ce qui est:
III. La Gestion Des Changements Incompatibles
Inévitablement, certaines des modifications qui ont été apportées modifier la sémantique de l'existant valide les programmes. Ceux qui maintiennent les différents compilateurs utilisés à l'interne essayer de faire en sorte que les programmeurs ont avertis que ces changements prennent effet, et que l'introduction d'une nouvelle version du compilateur n'a pas la force de tous les programmes à être recompilé immédiatement.
Par exemple, dans les premières implémentations de l'expression ambiguë
x=-1
a été interprété comme "décrémenter x par 1". Il est maintenant interprété comme "affecter la valeur -1 pour x". Ce changement a eu lieu au cours des trois versions majeures. Tout d'abord, le compilateur et l'lint
programme vérificateur ont été modifiés afin de générer un message d'avertissement sur la présence d'un "old-fashioned" de cette opération, comme l'=-
. Ensuite, les analyseurs ont été modifiés pour la nouvelle sémantique, et les compilateurs mis en garde contre une ambigu opération d'affectation. Enfin, les messages d'avertissement ont été éliminés.Soutien pour l'utilisation d'un "old-fashioned de l'initialisation"
int x 1;
(sans un signe égal) a été supprimée par une stratégie similaire. Cela permet à l'analyseur de produire plus intelligent de la syntaxe d'erreur de diagnostic.
Comme prévu, quelques C utilisateurs ignoré les avertissements jusqu'à l'introduction de l'incompatibles compilateurs forcés à choisir entre l'évolution de leur obsolètes code source ou de prendre en charge l'entretien de leurs propres versions du compilateur. Mais sur l'ensemble de la stratégie de progressive changement a été un succès.