ordre d'évaluation des sous-expressions
Question
J'ai regardé SO / CEI 9899 : 201x sous J.1 comportement non spécifié:
"The order in which subexpressions are evaluated and the order in which side effects
take place, except as specified for the function-call (), &&, ||, ?:, and comma
operators (6.5)."
Est-ce que cela signifie que dans
func1() + func2();
func2 () peut être préformé avant func1 (), ou même pendant func1 ()?
La solution
Dans la norme actuelle (ISO / IEC 9899: 1999), il y a un point de séquence entre les appels de fonction, mais l'ordre d'évaluation des opérandes à +
n'est pas spécifié si func1
peut être appelée avant ou après func2
mais les appels de fonction doivent pas se chevaucher ou être intercalées en aucune façon.
Cela signifie que chacune des func1
et func2
peut, si on le souhaite, d'interagir avec des données partagées sans que les changements de données en dessous d'une manière inattendue.
Autres conseils
Pas pendant, mais que, soit 1 puis 2 ou 2 puis 1.