Opérateurs unaires et ++ ou –

Pourquoi, dans la spécification C, seuls les opérateurs d’incrémentation et de décrémentation de préfixe sont résumés en tant qu’opérateurs unaires?

En fait, les opérateurs d’incrément et de décrément de post-fi xe sont résumés dans la section Opérateurs de Postfix.

Je ne vois pas la différence. Les deux fonctionnent sur un seul opérande.

REWRITTEN : Je suppose que j’ai mal lu la spécification, comme l’a souligné @Lundin. Une meilleure réponse semble être que les noms utilisés dans cette partie de la norme n’ont pas beaucoup de sens.

Bien sûr, l’incrémentation / décrémentation du préfixe et du préfixe est aussi simple que l’autre. C’est comme ça qu’ils sont utilisés. Le fait qu’ils aient des priorités différentes signifie qu’ils sont classés dans des groupes différents et que les noms historiques des groupes sont un peu décalés.

Vous faites référence à la norme C, dont un projet d’une version est ici .

La raison pour laquelle postfix inc / décrément se trouvent dans une section différente de celle du préfixe inc / décrément est que cette partie de la norme suit la grammaire et que, pour lever les ambiguïtés, ces opérateurs se trouvent à différents niveaux de la grammaire:

 expression unaire: 
   expression postfixée
   ++ expression unaire
   - expression unaire
   ...


 expression postfixée:
   expression primaire
   ...
   postfix-expression ++
   postfix-expression -

Cela permet à une expression telle que ++ E ++ (alors qu’une telle expression ne serait jamais valide de toute façon) à être analysée sans ambiguïté comme ++(E++) ).

@Pascal Cuoq a répondu pourquoi ils sont dans des groupes différents: c’est parce qu’ils ont une priorité différente et pour aucune autre raison. Cela a peu à voir avec le fait qu’ils soient réellement des opérateurs unaires ou binarys.

La raison pour laquelle le C utilise des noms confus pour les groupes d’opérateurs est très probablement cette table classique, mais incorrecte:

K & R 2ème édition page 48. entrez la description de l'image ici

Cette table est à blâmer pour beaucoup de mal dans le monde. À l’origine, K & R indiquait “tout ce qui était unaire” en tant que groupe d’opérateurs. Mais bien sûr, cela est correct: cela n’a aucun sens de postfix ++ – d’être groupé avec les opérateurs de préfixe.

Comme C était normalisé, le comité a probablement compris que ce tableau n’avait aucun sens, il a donc créé des groupes supplémentaires. Sur les deux meilleurs groupes de la table K & R, ils ont fait trois. Un groupe pour l’expression primaire (parenthèse claire () ), un groupe pour les postfixes et un groupe encore appelé unaire, probablement pour des raisons historiques. Un meilleur nom pour ce dernier aurait sans doute été celui d’opérateur de préfixe, mais la norme C n’est pas connue pour être rationnelle.

Je suppose que ce n’est qu’une question de structure de la norme. La norme C11 a une section spéciale pour les opérateurs postfixés, ils ne sont donc pas classés avec le rest des opérateurs infixés et préfixés. Mathématiquement, ils sont bien sûr unaires.

Tout d’abord, les opérateurs Postfix sont associatifs à gauche et les opérateurs unaires sont associatifs à droite.

Deuxièmement, les opérateurs Postfix ont une priorité plus élevée que les opérateurs Unary.