2010-05-29 3 views

Répondre

4

Ce n'est pas défini.

Vous pouvez trouver le projet de Comité du 6 mai 2005 de la norme C here (pdf)

section Voir 6.5 Expressions:

2 Entre le point de séquence précédent et suivant un objet a sa valeur stockée modifiée au plus une fois par l'évaluation d'une expression. De plus, la valeur antérieure doit être lue uniquement pour déterminer la valeur à stocker.

et l'exemple:

71) Ce paragraphe rend les expressions de déclaration non définis tels que

i = ++ i + 1;

a [i ++] = i;

+0

Robert, je pense qu'il appartient au compilateur de décider quel opérateur a préséance dans ce cas (je pense avoir lu quelque part que la spécification ne disons pas). –

+0

Merci, j'ai supprimé mon edit parce que la précédence est venue dans mon esprit ... – Robert

+2

@Robert: Parce que c'est ainsi que C est défini (par son standard): le résultat d'une expression qui modifie la même chose plusieurs fois est indéfini. En pratique, toute implémentation a tendance à être cohérente, mais à strictement parler, vous ne pouvez pas compter sur cela. – Richard

1

La réponse est actuellement undefined.

-1

Réponse à non défini parce que vous avez des situations dans lesquelles l'analyseur ne sait pas comment analyser le code ..

est a+++b: a + ++b ou a++ + b? Réfléchissez au fait que l'espace blanc est simplement ignoré lorsque vous utilisez le code source. Cela peut dépendre de l'implémentation du compilateur (et d'autres langages avec le même opérateur ++ peuvent choisir de donner la priorité à l'un au lieu d'un autre) mais en général ce n'est pas sûr.

Par exemple en Java votre ligne de code donne 37 comme la réponse, parce qu'il choisit de lier ++ les opérateurs d'une manière spécifique en fonction de la priorité, mais il est juste un choix ..

+0

juste pour savoir: pourquoi -1? – Jack

+1

Pas vrai. C'est bien défini où ces jetons commencent et où ils finissent. Dans 'a +++ b', c'est' a ++ + b' (principe de maximisation). –

+0

Oh, j'ai compris, l'indéfini donné par la même variable modifiée plusieurs fois. Je pensais que mon point devrait être considéré aussi d'ailleurs, puisque c'est vrai :) – Jack

Questions connexes