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++);
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!