EPFL
Faculté Informatique & Communications
Cours d'informatique

Mini-Référence :
les fonctions en C++

Portée Prototype Definition Appel Fonctions mathématiques

Portée des identificateurs par rapport aux blocs

Les variables déclarées à l'intérieur d'un bloc sont appelées variables locales au bloc.
Les variables déclarées en dehors de tout bloc sont appelées variables globales.

Il est possible de déclarer, à l'intérieur d'un bloc, une variable ou une constante avec un identificateur déjà utilisé pour une entité externe au bloc (i.e. une autre variable, constante, fonction,...). On se trouve alors avec deux variables qui portent le même nom. Dans ce cas, la variable globale (externe) est masquée par la variable locale, entre l'instant/le lieu de sa déclaration et la fin du bloc dans lequel s'est faite cette déclaration. Pendant toute la durée de vie (i.e. la portée) de la variable locale, il n'est plus possible de référencer la variable globale (Cela n'est toutefois pas tout à fait exact, il existe bien un moyen mais nous ne le verrons qu'au prochain semestre.).

Exemple :

#include <iostream> int var(1); // variable globale void main () { // début du bloc 1 int i(2); // variable locale au bloc 1 { // début du bloc 2 int i(3); // variable locale au bloc 2 const int var(4); // variable locale au bloc 2 cout << "La variable locale" << " i vaut : " << i << endl << "La constante locale" << " var vaut : " << var << endl; } // fin du bloc 2 cout << "La variable locale" << " i vaut : " << i << endl; cout << "La variable globale" << " var vaut : " << var << endl; } // fin du bloc 1

Résultat :

La variable locale   i  vaut : 3
La constante locale var vaut : 4
La variable locale   i  vaut : 2
La variable globale var vaut : 1

Le prototypage de fonctions

La syntaxe du prototype (i.e. de la déclaration) d'une fonction est:

Syntaxe :   type nom ( type1 arg1, ..., typen argn);
où:

Remarques:

Exemple :

double sincard(double x);

Définition de fonctions

La syntaxe de la définition d'une fonction est :
Syntaxe :  
type nom ( type1 arg1, ..., typen argn)
{
  // corps de la fonction
  ...
  return valeur;
}
Le corps de la fonction est un bloc.

Remarques:

Exemple:

double sincard(double x) { return ( sin(x) / x ); }

Appel des fonctions

La syntaxe d'invocation d'une fonction est :
Syntaxe :   nom ( var1, ..., varn );

Exemple :

//
// Prototypages
//
void titre();
bool divisible (const int a, const int b);

//
// Fonction principale:
// exemple d'invocations
//
void main()
{
    const bool res(divisible(5,9)); //exemple d'appel pour une initialisation
    titre();
    // voir la remarque ci-après pour l'explication de '(cond ? vrai : faux)'
    cout << "Test 4 et 2: " << (divisible(4,2) ? "oui" : "non") << endl
         << "Test 4 et 0: " << (divisible(4,0) ? "oui" : "non") << endl
         << "Test 4 et 3: " << (divisible(4,3) ? "oui" : "non") << endl;
}


//
// définition d'une fonction booléenne,
// admettant deux arguments entiers, et vraie dans le cas où la
// division entière est possible, sans reste.
//
bool divisible (const int a, const int b)
{
    return ( (b != 0) && (a % b == 0) );
}


//
// Fonction sans argument, et ne retournant rien.
//
void titre ()
{
    cout << "Titre de l'exercice" << endl;
    cout << "par Mme Pahut" << endl << endl;
}

Résultat :

Titre de l'exercice
par Mme Pahut

Test 4 et 2: oui
Test 4 et 0: non
Test 4 et 3: non

Remarque :

La syntaxe :

( condition ? action1 : action2) est une forme abrégée de la structure conditionnelle : if (condition) action1; else action2;

Attention toutefois,action1 et action2 ne correspondent pas à des blocs d'instructions, mais sont des instructions simples.


Fonctions mathématiques

Pour utiliser les fonctions mathématiques évoluées (logarithme, racine carrée...), il faut ajouter au début du programme la ligne:
#include <cmath>
Constante définie dans <cmath>: Principales fonctions mathématiques de <cmath> :
Ces fonctions renvoient des valeurs de type double. On peut par exemple écrire :
double x; x = sqrt(2.0);

Dernière mise à jour : $Date: 2009-09-11 17:10:52 +0200 (Fri, 11 Sep 2009) $   ($Revision: 25 $)