Vous êtes sur la page 1sur 13

Les fonctions

2 Notions de fonction en C

 Regrouper le code sous forme de module au lieu de réécrire sans arrêt les instructions souvent
répétées.
 permettre d’optimiser le texte source d’un programme ainsi que la taille du code exécutable.
 Permettre une lisibilité et une maintenance beaucoup plus facile du programme.
 Permettre de réunir dans des fichiers extérieurs tous les modules déjà écrits, déjà testés et
pouvant servir à d’autres programmes.

L’ordre des fonctions n’a pas d’importance. Toutefois, on veillera à placer la fonction main à la fin afin
de respecter une certaine ergonomie du programme.
3 Définition d’une fonction

La définition d’une fonction est sa description (en-tête et corps).

type_de_retour nom_de_la_fonction(type param1, type param2,…)


//en-tête
{
//corps de la fonction
[return (valeur_a_renvoyer);]
}
4 Les fonctions ne fournissant pas un résultat

Quand une fonction ne renvoie pas un résultat, on le précise dans l’en-


tête à l’aide du mot-clé void

void sansval(int n)
5 Les fonctions fournissant un résultat

En C comme pour tous les langages, certaines fonctions sont


destinées à fournir un résultat.
Ce résultat est matérialisé dans la fonction par le mot clé return.
6 Les fonctions fournissant un résultat

L’instruction return s’écrit de trois façons possibles:


 return; : la valeur retournée est indéfinie. Le compilateur ajoute automatiquement un retour de
ce type quand il ne retrouve pas cette instruction.
 return constante; : La valeur retournée est une constante.
 return (expression); : l’expression est évalué et sa valeur est retournée après conversion de
type si le résultat de l’expression est d’un type différent de celui de la fonction
float fexple(float x, int b, int c)
{
return (x*x+b*x+c);
}
Remarque : return interrompt également l’exécution de la fonction.
7 Les fonctions fournissant un résultat

 Le type de la fonction
La valeur retournée peut être de différents types. Celui-ci, qui est le type de
la fonction est précisée dans l’en-tête de la définition de la fonction pour que le
compilateur puisse le reconnaitre.
Exemple:
int max()
float moyenne();
8 Les variables globales et variables locales

 Les variables locales


En C, toute variable déclarée dans une fonction est locale à cette fonction.
Les variables locales sont souvent pratiques dans un programme. Cependant, elles représentent
aussi une source d’erreur.
#include <stdio.h>
void Lit()
{
int numero=12;
printf(‘’ la valeur de l’enregistrement est %d\n’’, numero);
}
int main()
{
int numero=15;
printf(‘’vous en êtes à %d essais\n’’, numero);
Lit();
printf(‘’vous en êtes à %d essais\n’’, numero);
return 0;
}
9 Les variables globales et variables locales
 Les variables globales
Toutes variables déclarées à l’extérieur des accolades sont globales
Les variables locales n’ont aucun lien avec des variables globales de même nom ou avec d’autres
locales à d’autres fonctions #include <stdio.h>
//déclaration de la variable en global
int num_enr;
void Lit()
{
printf(‘’ la vealeur de l’enregistrement est %d\n’’, num_enr);
num_enr++;
}
int main()
{
num_enr =12;
printf(‘’vous en êtes à % essais\n’’, num_enr);
Lit();
printf(‘’vous en êtes à %d essais\n’’, num_enr);
return 0;
}
10 Le passage de paramètres par valeur
 Les paramètres
Pour qu’une fonction soit parfaitement utilisable en toutes circonstances, il est nécessaire qu’elle
puisse , non seulement, renvoyer des informations mais qu’elle puisse aussi en recevoir. La fonction
appelante passe des arguments à la fonction appelée.

#include <stdio.h>
int max(int a, int b)
{
return a>b?a:b;
}
int main()
{
int x=3, y=9;
int val_max;
val_max= max(x,y);
printf(‘la plus grande des valeurs est %d\n’’, val_max);
return 0;
}
11 Le passage de paramètres par valeur

 Le passage par valeur


Le passage des arguments effectifs à la fonction se fait uniquement par valeur, l’argument
effectif étant l’argument fourni lors de l’appel de la fonction.

Chaque contenu est recopié dans un nouvel emplacement mémoire, propre à la fonction.
Cette recopie évite d’altérer les variables de la fonction appelante.

Souvent, on désire modifier définitivement la valeur de la variable. Dans ce cas, on utilise le


passage par adresse qu’on verra par la suite.
12 Prototype d’une fonction

Il est nécessaire en C de préciser les en-têtes toutes les fonctions qui sont
utilisées avant qu’elles ne soient définies : les prototypes des fonctions.

Le prototype d’une fonction précise au compilateur son nom, son type, la liste et
les type des arguments.

Exemple: int moyenne(int a, int b); //prototypage de la fonction


13 La récursivité

Le langage C autorise la réentrance et la récursivité des fonctions.


La réentrance est la propriété qui qualifie le fait qu’une fonction peut être
interrompue à n’importe quel moment, ré exécutée elle-même avec d’autres
données, puis reprise dans l’état où elle était au moment de l’interruption

La récursivité est la propriété d’un objet défini à partir de lui-même. Elle


peut être directe ou croisée.

Exemple: long int factorielle (int n)


{
return n<=1?(1):( n*factorielle( n-1));
}

Vous aimerez peut-être aussi