Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Langage C++
  3. Gestion des erreurs
Extrait - Langage C++ De l'héritage C au C++ moderne (avec programmes d'illustration) (2e édition)
Extraits du livre
Langage C++ De l'héritage C au C++ moderne (avec programmes d'illustration) (2e édition) Revenir à la page d'achat du livre

Gestion des erreurs

Introduction

Le dépistage d’erreurs pendant le fonctionnement d’un programme est un point capital. D’un point de vue théorique, le fonctionnement d’un programme n’est jamais assuré. On ne peut pas prouver qu’un programme va s’exécuter correctement, on peut uniquement le constater. Au niveau du code, contrôler le bon fonctionnement d’un programme revient la plupart du temps à vérifier pour chaque étape de son déroulement qu’elle s’est exécutée correctement : si l’étape a bien fonctionné, le processus peut continuer avec l’étape suivante, sinon il s’interrompt. Plusieurs techniques existent pour contrôler chacune des étapes d’un programme et ce chapitre propose d’expérimenter les plus communes. Bien entendu, la totalité des opérations réalisées dans un programme ne va pas être contrôlée. En général, le programmeur prend à sa charge uniquement les opérations sensibles liées à son propre code ou à l’utilisation de fonctions délicates puisées dans différentes bibliothèques.

Socle hérité du C

1. Retourner un booléen

La version la plus simple du contrôle d’erreur consiste à retourner true si tout va bien et false en cas d’erreur. Dans maFonction() ci-dessous, les instructions susceptibles de provoquer une erreur, en général des appels à d’autres fonctions appartenant à une bibliothèque, sont encadrées par un test. Dans cet exemple, si autreFonction() faisant l’objet du test retourne une erreur, le test est vrai et l’instruction return false provoque une sortie qui signale une erreur. S’il n’y a pas d’erreur, maFonction() continue de s’exécuter normalement jusqu’à l’instruction return true qui indique une fin sans erreur :

bool maFonction() 
{ 
    if( autreFonction() == RetourneUneErreur) 
        return false; 
     
    //suite du programme si tout va bien 
     
    // pour indiquer une sortie sans erreur 
    return true; 
} 

Exemple fonction ConsoleResize()

Nous écrivons une fonction qui permet de modifier la dimension de la fenêtre console depuis le code. Cette fonction nécessite un certain nombre de contrôles d’erreurs.

Toutes les informations concernant une fenêtre console sous Windows sont organisées et sauvegardées dans une structure C fournie par la bibliothèque Windows.h :

typedef struct _CONSOLE_SCREEN_BUFFER_INFO { 
  COORD      dwSize; 
  COORD      dwCursorPosition; 
  WORD       wAttributes; 
  SMALL_RECT srWindow; 
  COORD      dwMaximumWindowSize; ...

Contrôle d’erreur C++

1. Introduction

a. Bibliothèques de diagnostics

Pour le traitement des erreurs, C++ propose d’une part le mécanisme fondamental des exceptions avec trois instructions throw, try et catch intégrées dans le langage lui-même, et d’autre part un ensemble comprenant de nombreuses bibliothèques regroupées en quatre principaux en-têtes :

<exception> : principale bibliothèque destinée à la gestion des exceptions et utilisée dans les bibliothèques standards, elle réunit trois classes, huit fonctions dont trois génériques et deux définitions de type (typedef).

<stdexcept> : cette bibliothèque contient dix classes qui ont pour objectif d’identifier des types d’erreur ; par exemple, les classes logic_error, invalid_argumentdomain_error, length_error, out_of_range.

<system_error> : la bibliothèque contient cinq classes et deux fonctions utilisées pour signaler des erreurs provenant du système d’exploitation, des flux d’entrées/sorties ou d’autres API de bas niveau.

<stacktrace> (C++23) : cette bibliothèque introduite en 2023 contient deux classes : stacktrace_entry et basic_stacktrace qui regardent le fonctionnement et l’organisation de la pile en mémoire, par exemple des appels de fonctions.

Nous présentons dans cette section ce qui nous a semblé primordial : le mécanisme fondamental des exceptions avec les instructions throw, try et catch, les principles fonctionnalités de l’en-tête <exception> et l’outil static_assert. Pour le reste, en cas de nécessité, vous pouvez vous reporter à la documentation fournie sur http://cppreference.com.

b. Conseil sur les exceptions

Parmi les conseils...