Perfectionnement à la programmation en C — Licence 2 Informatique

HomeResearchTeaching

Exercice 2.2

  1. Voir 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.

  1. 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.

  2. 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.

  3. Ici, le troisième paramètre est une adresse, ce qui donne le droit d’écrire par exemple

    int res;
    res = 8;
    addition_3(16, 32, &res);

    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.

  4. 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.

  5. 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.

  6. Cette fonction est à effet secondaire car son appel change les valeurs pointées par les adresses x et y.

  7. 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.

  8. 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.

  9. 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.