Partager via


Effets secondaires

L'ordre d'évaluation des expressions est définie par l'implémentation spécifique, sauf lorsque le langage garantit un ordre particulier d'évaluation (comme décrit dans Priorité et ordre d'évaluation).Par exemple, des effets secondaires se produisent dans les appels de fonction suivants :

add( i + 1, i = j + 2 );
myproc( getc(), getc() );

Les arguments d'un appel de fonction peuvent être évalués dans n'importe quel ordre.L'expression i + 1 peut être évaluée avant i = j + 2, ou i = j + 2 peuvent être évaluées avant i + 1.le résultat est différent dans chaque cas.De même, il est impossible de vérifier les caractères sont passés en réalité sur myproc.Comme unaire incrémentez les opérations et de décrémentation impliquent des assignations, ces opérations peuvent provoquer des effets secondaires, comme indiqué dans l'exemple suivant :

x[i] = i++;

Dans cet exemple, la valeur d' x modifiée est imprévisible.la valeur de l'indice a pu être la nouvelle ou ancienne valeur d' i.Le résultat peut varier selon des compilateurs ou différents niveaux d'optimisation.

Étant donné que C ne définit pas l'ordre d'évaluation des effets secondaires, les deux méthodes d'évaluation abordées ci-avant sont correctes et l'une ou l'autre peut être implémenté.Pour vérifier que votre code est portable et clair, évitez les instructions qui dépendent d'un ordre particulier d'évaluation pour les effets secondaires.

Voir aussi

Concepts

Évaluation de l'expression (c)