Maison > développement back-end > C++ > L'optimisation du compilateur C exploite-t-elle l'ambiguïté de l'ordre d'évaluation des arguments ?

L'optimisation du compilateur C exploite-t-elle l'ambiguïté de l'ordre d'évaluation des arguments ?

Linda Hamilton
Libérer: 2024-12-14 01:54:13
original
882 Les gens l'ont consulté

Does C   Compiler Optimization Exploit Argument Evaluation Order Ambiguity?

Optimisation du compilateur de l'ordre d'évaluation des arguments en C

La norme C permet aux compilateurs de sélectionner l'ordre d'évaluation des arguments de fonction à leur discrétion. Cela soulève la question de savoir si les implémentations du monde réel exploitent cette ambiguïté pour améliorer les performances.

Dans la plupart des cas, les compilateurs n'optimisent pas l'ordre d'évaluation des arguments. Cependant, l'architecture, la convention d'appel et le type d'argument peuvent influencer le comportement. Sur les machines x86, la convention d'appel Pascal évalue les arguments de gauche à droite, tandis que la convention C (__cdecl) procède de droite à gauche. Les programmes indépendants de la plate-forme envisagent généralement des conventions d'appel pour éviter les surprises.

Par exemple, dans l'extrait de code classique :

int i = 0;
foo(i++, i++);
Copier après la connexion

Le compilateur peut évaluer i avant i dans la convention d'appel Pascal, mais le le contraire peut se produire dans __cdecl. Néanmoins, le résultat n'est pas défini et il est déconseillé de s'appuyer sur des ordres d'évaluation spécifiques.

Notez que la norme du langage classe l'ordre d'évaluation des arguments comme « non spécifié », ce qui signifie qu'il n'est pas explicitement défini ou interdit. Cela permet un comportement dépendant de l'implémentation et souligne la nature non déterministe de la machine abstraite.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal