Académique Documents
Professionnel Documents
Culture Documents
Laurent SARRY
laurent.sarry@uca.fr
Quizz Wooclap #2
Introduction aux fonctions
• Une fonction est une séquence réutilisable de commandes
définie pour réaliser une tâche spécifique
• La fonction principale du programme est main
• La bibliothèque standard du C++ comporte de nombreuses fonctions
prédéfinies
• L’utilisateur peut définir ses propres fonctions
• Une fonction est appelée au sein d’une autre fonction dite
appelante : l’exécution est interrompue et les commandes
sont exécutées séquentiellement jusqu’au retour de la
fonction appelée
Introduction aux fonctions
• La déclaration d’une fonction est de la forme :
type-de-retour nomFonction()
{
// Corps de la fonction
}
Introduction aux fonctions
#include <iostream> // pour std::cout
int main()
{
int a{ 5 }; // a créée, initialisée, début de portée
int b{ 6 }; // b créée, initialisée, début de portée
return 0;
} // fin de la portée, a et b sont détruites
Question #2
Déclarations et définitions anticipées
• Une fonction ne peut pas être appelée si elle n’a pas été
définie ou au moins déclarée avant l’appel
• Une déclaration consiste à donner le prototype de la fonction (nom,
type de retour, type des paramètres). Elle doit ensuite être définie et
pourra l’être après l’appel de la fonction.
• Une définition consiste à implémenter le corps de la fonction. Une
fonction ne peut être définie qu’une seule fois
• dans un fichier source (sinon erreur de compilation)
• dans un programme constitué de plusieurs fichiers (sinon erreur de linker)
Déclarations et définitions anticipées
#include <iostream>
int main()
{
int a{ 5 };
int b{ 6 };
return 0;
}
#define PRINT_CAS_1
int main()
{
#ifdef PRINT_CAS_1
std::cout << "Cas 1 \n"; // compilé car PRINT_CAS_1 défini
#endif
#ifndef PRINT_CAS_2
std::cout << "Cas 2\n"; // compilé car PRINT_CAS_2 non défini
#endif
return 0;
}
Fichiers d’en-tête
• Les fichiers d’en-tête (header .h, .hpp ou sans extension)
permettent de mutualiser toutes les déclarations anticipées de
fonctions et de variables
• Exemple : le fichier d’en-tête iostream de la STL comporte les
déclarations anticipées de variables comme std::cout
• Modifier le projet C++ pour inclure un fichier d’en-tête
somme.h
Problème d’inclusion multiple
• L’inclusion multiple d’un fichier d’en-tête conduit à la
redéfinition des fonctions ou variables qu’il contient
• Il peut être inclus dans plusieurs fichiers sources
• Il peut être inclus dans un ou plusieurs autres fichiers d’en-tête
• Pour éviter cela, on doit encadrer les déclarations du fichier
d’en-tête dans un garde-fou (header guard ou include guard)
#ifndef NOM_UNIQUE
#define NOM_UNIQUE
// déclarations (ou définitions par l’utilisateur de certains
types)
#endif
Problème d’inclusion multiple
• La plupart des compilateurs récents comporte la directive
#pragma once comme alternative aux garde-fous standards
• Pour assurer la portabilité du code, il est cependant
préférable de ne pas l’utiliser