définition de fonction

La déclaration d’une fonction ne comprend que la signature (en tête, prototype) d’une fonction.

La définition d’une fonction, c’est à la fois sa signature suivie de l’instruction composée qui en constitue le corps. Il s’agit donc bien d’une définition complète de la fonction.

La signature :

Par opposition, à la déclaration de la fonction (signature seule, il ne suffit pas de donner le type des paramètres formels, il faut en donner le nom, pour qu’ils puissent être utilisés dans le corps de la fonction).

La portée des paramètres formels s’étend du point de déclaration des paramètres formels jusqu’à la fin de l’instruction composée (bloc) en constituant le corps. Il est interdit de déclarer dans ce bloc une variable de même nom que le paramètre formel.

Mode de passage de paramètres

Le passage de paramètres en C se fait par valeur.

Quel est l’effet de modifier un paramètre formel dans une fonction ? Aucun, le paramètre effectif n’est pas modifié.

void echange (int i, int j ) ;  /* Non, cette fonction n'échangera pas ses parmètres */

echange (3, 4) ; /* Cet exemple en montre la stupidité */

Mais dans le cas des pointeurs, on peut modifier l’objet pointé.

Exemples :

Une fonction sans effet de bord, sans modification de l’environnement.

Elle prend en entrée deux paramètres i et j de type int et rend un résultat de type int formé de la somme des valeurs de i et de j.

int add (int i, int j) {

return i+j ; /* renvoie comme résultat la somme des paramètres formels i et j */

}

Un exemple d'appel de la fonction. Deux paramètres effectifs en entrée, la varaible k et la valeur 4. Le résultat est mis dans la variable

int k = 3;

int l = add (k, 4)

/*le paramètre effectif k n’est pas modifié. On a seulement copié sa valeur à l’appel de la fonction */

Une fonction avec effet de bord.

Elle modifie un élément (indiqué par un indice, index) d’une variable externe, le tableau tab. Elle ne rend pas de résultat apparent (void). Pourtant elle a un effet.

void modifier_Element (int index , int valeur) {

tab[index] = valeur ;

}

Une autre fonction avec un effet de bord (utilisation des pointeurs comme paramètres)

void echange (int *pi, int *pj ) ;  /* on n'en donne que la déclaration */

echange (&i, &j) ;

Le but est bien d’échanger les valeurs des variables  i et de j. On passage à la fonction les adresses de i et j. On n'est pas intéressé par le résultat (void) 

» Glossaire du langage C