Академический Документы
Профессиональный Документы
Культура Документы
Les fonctions
1. 2. 3. 4. Introduction Mise en uvre Passage par valeur et par adresse Pour aller plus loin
Prog. Struct. - C
IV - Les Fonctions
Introduction
Une fonction vue du processeur
C'est un code excutable une adresse en mmoire termin par une instruction de retour l'appel de la fonction, le -processeur excute le code partir de l'adresse de la fonction et l'instruction retour le fait revenir l'instruction suivant l'appel. Des donnes peuvent tre transmises la fonction en paramtres. Lors du retour une valeur peut tre rcupre.
Prog. Struct. - C
IV - Les Fonctions
Instruction i+2 ;
Prog. Struct. - C
IV - Les Fonctions
Instruction i+2 ;
4
if (argument>0) Le calcul de sqrt(4)
sqrt(argument)
Return 2
Retour de 2
Prog. Struct. - C
IV - Les Fonctions
Prog. Struct. - C
IV - Les Fonctions
MaFonction
Prog. Struct. - C
IV - Les Fonctions
1) Le Prototypage
Type_Ret Ident_fonc (,Type Argument,);
Exemples : double CalcDiscri (double Arga,double Argb,double Argc); int printf (const char *pFormat, ); void fdouble (double *pVar); Localisation : #include <stdio.h> //c'est ICI pour le prototypage des fonctions int main() { }
Prog. Struct. - C
IV - Les Fonctions
2) La Dfinition
Arguments formels
Exemple : double CalcDisc(double Arga,double Argb,double Argc) { //Dclaration des variables si besoin return Argb*Argb-4*Arga*Argc;
}
Localisation :
Prog. Struct. - C
IV - Les Fonctions
3) L'appel de la fonction
{ double ValDisc; ValDisc = CalcDisc (a,b,c); } Paramtres de la fonction
Localisation de l'appel : dans n'importe quelle dfinition de fonction, y compris dans sa propre dfinition Rcursivit
Prog. Struct. - C
IV - Les Fonctions
10
Ma premire fonction
\fonctions\exemple1.prj
Prog. Struct. - C
IV - Les Fonctions
11
2 types de fonctions
Les fonctions qui retournent quelque chose (si on ne met rien, une fonction retourne un entier (int) par dfaut). Pour cela, il faut utiliser l'instruction return : return expression;
EXEMPLE :
/* Une fonction calculant le produit de deux entiers */ /* Paramtres d'entre : deux entiers, Type retour : entier */
int calcule_produit (int iExp1, int iExp2) { int iProduit; iProduit = iExp1 * iExp2; return iProduit;
Prog. Struct. - C
IV - Les Fonctions
12
2 types de fonctions
Les fonctions qui ne retournent rien (void) : void nom_fonction(dclarations_d'arguments) Elles sont galement appeles procdures.
EXEMPLE :
/* Procdure affichant le produit de deux entiers */ /* Paramtres d'entre : deux entiers, Type retour : rien */
void affiche_produit (int iExp1, int iExp2) { int iProduit; iProduit = iExp1 * iExp2; printf ("Le produit de %d et %d est gal %d", iExp1, iExp2, iProduit);
Prog. Struct. - C
IV - Les Fonctions
13
On indique au compilateur que fonction1 est une fonction qui ne retourne rien et qui admet pour paramtre un double
On donne le code de la fonction. Le compilateur rserve 8 octets de la pile dsigns par z. Pour le moment, le contenu de cette zone est indtermin.
14
20.0
pile
20.0
Prog. Struct. - C
IV - Les Fonctions
15
En fin dexcution
void fonction1 (double z) { z = z*2.0; }
20.0
Prog. Struct. - C
IV - Les Fonctions
16
Aprs lexcution
Zone de 8 octets rserve par x de nouveau accessible
20.0
La zone mmoire rserve pour z nest plus accessible et le contenu de x na pas t modifi.
pile
Prog. Struct. - C
IV - Les Fonctions
17
18
20.0
pile
&x
Prog. Struct. - C
IV - Les Fonctions
19
En fin dexcution
20.0 40.0
&x
Prog. Struct. - C
IV - Les Fonctions
20
Aprs lexcution
8 octets rservs par x de nouveau accessible
40.0
La zone mmoire rserve pour pz nest plus accessible et le contenu de x a t modifi par adressage indirect.
pile
Prog. Struct. - C
IV - Les Fonctions
21
Ma deuxime fonction
val_et_adr.prj Exemple
Prog. Struct. - C
IV - Les Fonctions
22
Prog. Struct. - C
IV - Les Fonctions
23
24
A RETENIR !!
Pour modifier le contenu d'une variable dclare dans la fonction appelante par la fonction appele, il est ncessaire de passer en paramtre l'adresse de cette variable. Donc, dans le prototypage et la dfinition de la fonction, l'argument doit tre un pointeur.
Prog. Struct. - C
IV - Les Fonctions
25
Prog. Struct. - C
IV - Les Fonctions
26
1) La Rcursivit
La fonction s'appelle elle-mme ! Exemple :
double Factorielle (int n); double Factorielle (int n) { if (n <= 0) return 1; } //Prototype
factorielle.prj
Prog. Struct. - C
IV - Les Fonctions
27
Prog. Struct. - C
IV - Les Fonctions
28
Prog. Struct. - C
IV - Les Fonctions
29
30
Prog. Struct. - C
IV - Les Fonctions
31
IV - Les Fonctions
double (*pTabFonc [3])(double)={sin,cos,tan}; pFonc = MaFonc; Le prototype de MaFonc doit tre connu par le compilateur.
Prog. Struct. - C
IV - Les Fonctions
33
pointfonct.prj
Prog. Struct. - C
IV - Les Fonctions
34