C
— Licence 2 InformatiqueVoir le cours. La subtilité à bien comprendre ici, concernant cette notion de fonction à effet secondaire, est que même si dans le corps d’une fonction figure des instructions à effet secondaire, la fonction peut ne pas être à effet secondaire.
Cette fonction n’est pas a effet secondaire. Lors de son appel,
les paramètres a
et b
donnent bien lieu à la
création de deux variables locales mais celles-ci disparaissent juste
après l’appel. Ainsi, la mémoire est restituée telle qu’elle était avant
tout appel.
Même remarque que pour la question précédente. Ici, il y a une
variable locale supplémentaire res
, qui cette fois-ci n’est
pas un paramètre. Cela ne change rien : cette variable locale disparaît
elle aussi après l’appel.
Ici, le troisième paramètre est une adresse, ce qui donne le droit d’écrire par exemple
int res;
= 8;
res (16, 32, &res); addition_3
de sorte que la mémoire est modifiée par l’appel de cette fonction de
manière persistante. La variable res
est en effet située à
l’extérieur des variables locales de la fonction. Cette fonction est
donc à effet secondaire.
Ici, un paramètre est certes une adresse (considéré ici comme un tableau), mais il n’est utilisé ici que comme valeur droite (et donc la zone mémoire adressée n’est jamais modifiée). Cette fonction n’est donc pas a effet secondaire.
Cette fonction imprime des caractères sur la sortie standard, ce
qui revient à modifier le fichier stdout
et donc la
mémoire. Cette fonction est donc à effet secondaire.
Cette fonction est à effet secondaire car son appel change les
valeurs pointées par les adresses x
et
y
.
Ici, une variable globale nb_appels
est utilisée et
incrémentée à chaque appel. Cette variable est persistante à la
fonction. Cette fonction est donc à effet secondaire.
Ici, la variable globale n’est utilisée que comme valeur droite. De plus, aucune autre instruction ne la modifie. Cette fonction n’est pas à effet secondaire.
Cette fonction est paramétrée par une chaîne de caractères
tab
qui figure comme valeur gauche (certains de ses
caractères peuvent donc être modifiées). Cette fonction est donc à effet
secondaire.