Compilateurs et ordre d'évaluation des arguments indéterminés
La norme C permet aux implémentations d'évaluer les arguments de fonction dans n'importe quel ordre. Cela a-t-il un impact sur le comportement du programme ?
Le problème présumé
Considérez l'extrait de code suivant :
int i = 0; foo(i++, i++);
Si les arguments sont évalués de gauche à droite , je serai incrémenté deux fois avant d'être transmis à foo. Cependant, si les arguments sont évalués de droite à gauche, i ne sera incrémenté qu'une seule fois. Cela pourrait-il causer des problèmes ?
Compilateurs et évaluation des arguments
Bien que l'ordre d'évaluation des arguments dépend de l'implémentation, la plupart des compilateurs adhèrent à la convention d'appel de l'architecture cible. Sur x86, la convention d'appel Pascal évalue les arguments de gauche à droite, tandis que la convention d'appel C (__cdecl) les évalue de droite à gauche.
Les compilateurs en tiennent souvent compte, en particulier pour les programmes multiplateformes, pour éviter des imprévus. comportement.
Conclusion
L'ordre d'évaluation des arguments ne dépend pas de la langue mais de la plateforme et dépendant de la mise en œuvre. Bien que la norme ne précise pas l'ordre, les compilateurs suivent généralement la convention d'appel de l'architecture cible et peuvent ajuster l'ordre d'évaluation en conséquence. Cela garantit qu'un code mal écrit se comportera de manière cohérente, compte tenu de la convention d'appel correcte.
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!