# include …

prototype

void main ( ) { appel(s) }

{ définition }

 

Procédure : fonction sans valeur de retour

 

Déclaration ou prototype de la fonction

void       NomProcédure(type paramètre1, type paramètre2)

 

void  qui ne retourne rien

Appel de la fonction

void main {

NomProcédure(argt1, argt2);

}

 

Définition de la fonction

void       NomProcédure(type paramètre1, type paramètre2) {

corps de la fonction : variables-locales, instructions…

}

 

Fonction avec valeur de retour

 

Déclaration ou prototype de la fonction

type retourné     NomFonction(type paramètre1, type paramètre2)

 

Appel de la fonction

void main {

 

NomFonction(argt1, argt2);

return valeur-à-retourner ;

}

 

Rq : return (valeur-à-retourner) ; Û return valeur-à-retourner ;

 

Définition de la fonction

void       NomFonction(type paramètre1, type paramètre2) {

corps de la fonction : variables-locales, instructions…

}

 

Fonctions

Avantages

· raisonnement plus général – décomposition en sous-problèmes

· trouver les bugs

· réutilisation

Inconvénients

· programme plus lents

sauvegarde du contexte

   * pile ¬ adresse de retour

   * sauvegarde des valeurs des registres

puis restoration

mais actuellement machines très puissantes (plus visible)

 

inline fonction(type paramètres) ;

® optimisation car mécanisme d'appel différent

Chaque appel est remplacé par le corps de la fonction

Þ plus de sauvegarde ni de restoration du contexte ® + rapide

Pour fonctions très courtes (sinon trop de code)

 

Passage des arguments (prog.ppal)

· passage par valeur (défaut)

* paramètre (D)

* les paramètres sont des copies des arguments

* les modifier ne modifie pas les arguments

fonction(int x)

· passage par référence

* paramètre (D/R)

* on passe l'adresse de l'argument (pas de copie : + rapide)

fonction(int &x)

 

Tableaux

* Toujours par référence (sinon trop de place et long)

* Pas besoin de &

* pour passer un tableau en (D) : mettre const dans le prototype

type-renvoyé  fonction(const  type-du-tableau [] ) ;

 

Rq : const type-du-tableau [] OU  type-du-tableau const []

 

Prototype Û type obligatoire

Définition Û nom obligatoire

 

Le compilateur a besoin de la 2e dimension : le nb de colonnes, pour retrouver l'adresse de l'élément

Þ nb de colonnes obligatoire dans le prototype

 

Valeur par défaut d'un paramètre

* dans le prototype

* de droite à gauche  ¬

fonction(int x, int y, int z = valeur-par-défaut)

 

Attn : tableaux

*        prototype : void procedure(const int [], int &) Û type

*        appel : procedure(tableau, var);  Û nom

*        définition : void procedure(const int tableau[], int &var) Û nom et type