Maison  >  Article  >  développement back-end  >  Qui définit la priorité et l’associativité des opérateurs en C ?

Qui définit la priorité et l’associativité des opérateurs en C ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-01 14:18:29273parcourir

Who Defines Operator Precedence and Associativity in C  ?

Précédence et associativité des opérateurs : les facteurs de contrôle

Dans le domaine de la programmation, la compréhension des règles régissant la préséance et l'associativité des opérateurs est cruciale. Alors que de nombreux manuels de programmation présentent des graphiques illustrant la priorité et l'associativité des opérateurs, la question sous-jacente demeure : qui définit ces règles ?

Définir les normes

Contrairement à la croyance populaire, la norme ANSI C11 ne définit pas explicitement priorité des opérateurs et associativité. Au lieu de cela, ces concepts sont ancrés dans la grammaire de la langue elle-même. Par exemple, la règle de production grammaticale pour l’addition ( ) et la soustraction (-) en C révèle qu’une expression multiplicative est une sous-règle d’une expression additive. Ceci établit la préséance entre ces opérateurs.

Associativité et ordre d'évaluation

L'associativité détermine comment plusieurs utilisations du même opérateur seront regroupées. Par exemple, l'opérateur d'addition est associatif de gauche à droite, ce qui signifie que des expressions telles que « x y z » seront regroupées comme « (x y) z ».

Il est important de différencier l'associativité de l'ordre d'évaluation. Bien que ces concepts soient liés, ils sont distincts. L'associativité dicte le regroupement, tandis que l'ordre d'évaluation concerne la séquence dans laquelle les expressions sont évaluées.

Ordre d'évaluation dans les appels de fonction

Revenant à l'exemple des opérateurs d'appel de fonction, de gauche à droite l'associativité implique que "f()()()" serait regroupé comme "(f())()". Cette règle de regroupement n'impacte pas l'ordre d'évaluation des fonctions, qui reste non séquencé. Cependant, les opérandes doivent être évalués avant que l'opérateur ne soit appliqué.

Points de séquence et séquencés avant

Historiquement, les points de séquence étaient utilisés pour définir l'ordre d'évaluation en C et C . Cependant, la terminologie a depuis changé pour « séquencé avant ». Ce concept signifie que l'évaluation d'une expression doit en précéder une autre.

En résumé, alors que les tableaux de priorité des opérateurs et d'associativité se trouvent couramment dans les manuels de programmation, ces règles sont finalement dérivées de la grammaire du langage. Comprendre la grammaire permet aux programmeurs d'interpréter avec précision les expressions et de déterminer leur ordre d'évaluation.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn