function trace (n : integer) : integer; begin write (x); trace := x end; function erronée () : integer; begin erronée := carré (trace x) end; |
erronée
évalue trace x
une seule fois.
Après l'expansion en ligne naïve, trace x
sera évalué deux fois
et imprimera deux fois la valeur de x
, changeant ainsi
la sémantique du programme.