Vous êtes sur la page 1sur 22

Chapitre 5: Les Fonctions

1
Module: Langage C
Cours anim par A.MOHAMMEDI
2 1. Dfinition

Une fonction est un traitement donn, renvoyant un


rsultat, quon crit en respectant une structure
rigoureuse dans le but dy faire appel au besoin durant
le programme.
Une fonction nous vite lors de lcriture dun
programme de rcrire plusieurs fois le mme
traitement, si une redondance dun traitement donn
est dtecte dans un programme il devient intressant
de dfinir une fonction et dy faire appel.
3
Une fonction la forme gnrale suivante:
<Type_fonction> <nom_fonction>(paramtres)
{
Traitement;
Return rsultat;
}

Une fonction doit tre dfinie avant la partie du


programme y faisant appel;
4 2. Le Type dune fonction

Le type de la fonction est tout simplement le type du rsultat ou de la valeur


quelle retourne.

La sortie ne peut renvoyer quune seul et unique valeur, la sortie est du type

de la fonction, elle est la partie terminant la fonction : return rsultat

Le return peut galement tre suivi dune multitude doprations, au lieu de

calculer le rsultat et de le renvoyer, on peut faire en sorte quil soit calcul

et directement renvoyer par le biais de return.


5 Exemples
M1:
Int somme(int a, int b)
{
Int resultat=0;
Resultat=a+b;
Return Resultat;
}
M2:
Int somme(int a, int b)
{
Return a+b
}
6 3. Les paramtres
Les paramtres sont des entres dune fonction, mis entre
parenthses, prcds de leurs types, ils sont la pour la
correspondance entre les variables utilises lors du traitement et les
variables quon envoi et quon veut rellement traiter.

Une fonction peut avoir une infinit de paramtres comme elle


peut nen avoir aucun.

Si on a besoin de plusieurs paramtres, il doivent tre spars par


des virgules, prcd chacun par son type, aucune factorisation
de type nest tolre.
7 4. Une fonction qui ne renvoi rien
Il existe un type de fonctions qui ne renvoi rien, ce type de fonctions prend
pour type void, qui veut dire vide.
Si on veut crire une fonction qui affiche une chaine de caractre, on
utilise une telle fonction qui ne renvoi rien, elle prend en paramtres
seulement une chaine de caractre et laffiche:

Void affiche (char chaine[])


{
Printf( %s ,chaine);
}
8 5. Appel dune Fonction

Si on dfinit une fonction, cest forcement pour


pouvoir sen servir en cas de besoin, cette
opration sappelle Appel de la fonction , on
appelle une fonction en affectant une variable
du type de retour de la fonction, lentte de la
fonction, les paramtres sont les noms des
variables quon veut traiter et ne sont pas
prcds de leurs types.
Exemple:
9 # include <stdio.h>
# include <stdlib.h>
Int somme(int a, int b);
Int main(int argc, char * argv[])
{
Printf( entrez les vleurs:\n );
Int S=0;
Int op1,op2;
Scanf( %d %d , &op1, &op2);
S=somme (op1, op2);
Printf(la somme=%d , S);
Return Exit_Success;
}
Int somme(int a, int b)
{
Return a+b;
}
10 6. Types de variables

Il existe deux types types de variables savoir:


- Variable globale
- Variable locale
11 6.1. Variable globale

Une variable globale est une variable qui peut tre


partage par plusieurs fonctions dont le programme
principal main ().
En effet, toute variable globale peut tre modifie
insidieusement par nimporte quelle fonction.
Les variables globales ne sont connues du compilateur
que dans la partie du programme source suivant leur
dclaration. On dit que leur porte est limite la partie
du programme source qui suit leur dclaration.
12 Exemple
main() { Les variables n et x sont
{ . accessibles aux fonctions fct1 et
fct2, mais pas au programme
.... } principal.
} fct2 ()
int n ; {
float x ; .
fct1 (...) }
13 6.1.1 La classe dallocation des
variables globales
Dune manire gnrale, les variables globales existent
pendant toute lexcution du programme dans lequel
elles apparaissent. Leurs emplacements en mmoire
sont parfaitement dfinis lors de ldition de liens. On
traduit cela en disant quelles font partie de la classe
dallocation statique.
De plus, ces variables se voient initialises zro, avant
le dbut de lexcution du programme, sauf, bien sr, si
vous leur attribuez explicitement une valeur initiale au
moment de leur dclaration.
6.1.2. Les variables globales caches
14 Il est possible de cacher une variable globale, cest--dire
de la rendre inaccessible lextrieur du fichier source o elle
a t dfinie. Il suffit pour cela dutiliser la dclaration static.
Exemple:
static int a ;
Sans la dclaration static, a
main() serait une variable globale
{ ordinaire. Par contre, cette
..... dclaration demande
quaucune trace de a ne
} subsiste dans le module objet
fct() rsultant de ce
{ fichier source.

.....
}
15 6.2. Les variables locales

Des variables sont dites locales la fonction dans


laquelle elles sont dclares.
Les variables locales ne sont connues qu lintrieur de
la fonction o elles sont dclares. Leur porte est donc
limite cette fonction.
Les variables locales nont aucun lien avec des variables
globales de mme nom ou avec dautres variables
locales dautres fonctions.
16 Exemple

int n ; fct1 () La variable p de main na aucun


main() { rapport avec la variable p de
fct1. De mme, la variable n de
{ int p; fct1 na aucun rapport avec la
int p ; int n; variable globale n. Notez quil
.... } est alors impossible, dans la
fonction fct1, dutiliser cette
} variable globale n.
17 6.2. Les variables locales

Par dfaut, les variables locales ont une dure de vie


limite celle dune excution de la fonction dans
laquelle elles figurent.
Plus prcisment, leurs emplacements ne sont pas
dfinis de manire permanente comme ceux des
variables globales. Un nouvel espace mmoire leur est
allou chaque entre dans la fonction et libr
chaque sortie. Il sera donc gnralement diffrent dun
appel au suivant.
On traduit cela en disant que la classe dallocation de
ces variables est automatique.
18 6.2. Les variables locales

Remarque:
Il est toutefois possible de demander dattribuer un
emplacement permanent une variable locale et quainsi
sa valeur se conserve dun appel au suivant. Il suffit pour
cela de la dclarer laide du mot-cl static (le mot static
employ sans indication de type est quivalent static
int).
Exemple
19
#include <stdio.h>
main() Comme pour les variables
{ void fct(void) ; globales (lesquelles sont aussi
int n ; de classe statique) : les
for ( n=1 ; n<=5 ; n++) variables locales de classe
fct() ;
statique sont, par dfaut,
initialises zro.
}
void fct(void)
{ static int i ;
i++ ;
printf ("appel numro : %d\n", i) ;
}
Rsum
20
21 7. Fonctions rcursives
Le langage C autorise la rcursivit des appels de
fonctions. Celle-ci peut prendre deux aspects :
rcursivit directe : une fonction comporte, dans sa
dfinition, au moins un appel elle-mme,
rcursivit croise : lappel dune fonction entrane celui
dune autre fonction qui, son tour, appelle la fonction
initiale (le cycle pouvant dailleurs faire intervenir plus de
deux fonctions).
22 Exemple

long fac (int n)


{
if (n>1) return (fac(n-1)*n) ;
else return(1) ;
}