« Fonctions de base en langage C/assert.h » : différence entre les versions

Une page de Wikiversité, la communauté pédagogique libre.
Contenu supprimé Contenu ajouté
création ou initialisation
 
m Ajout rapide de la catégorie Catégorie:Fonctions de base en langage C (avec HotCats) - Modif. navigateur chapitre
Ligne 1 : Ligne 1 :
{{Chapitre
|titre=assert.h
|titre_leçon=Fonctions de base en langage C
|idfaculté=informatique
|leçon=[[Langage C/Fonctions de base|Fonctions de base en langage C]]
|numero=1
|précédent=[[Langage C/Fonctions de base|Sommaire]]
|suivant=[[Langage C/Fonctions de base/ctype.h|ctype.h]]
|niveau=
}}
== Description ==
== Description ==
Ce fichier d'include ne définit qu'une seule macro : <code>assert(expression)</code>. Si ''expression'' est fausse (ou égale à 0), alors un message d'erreur est affiché et le programme est arrêté par <code>abort</code> :
Ce fichier d'include ne définit qu'une seule macro : <code>assert(expression)</code>. Si ''expression'' est fausse (ou égale à 0), alors un message d'erreur est affiché et le programme est arrêté par <code>abort</code> :
Ligne 37 : Ligne 47 :
*<code>assert</code> peut être cependant utile pendant les phases de mises au point. Les erreurs détectées doivent être prises en compte d'une autre façon et exprimées par des messages plus compréhensibles. Les autres assertions qui n'ont pas été rencontrées pourront être laissées dans le code et rendues inactives à l'aide de NDEBUG.
*<code>assert</code> peut être cependant utile pendant les phases de mises au point. Les erreurs détectées doivent être prises en compte d'une autre façon et exprimées par des messages plus compréhensibles. Les autres assertions qui n'ont pas été rencontrées pourront être laissées dans le code et rendues inactives à l'aide de NDEBUG.
*Il peut être désorientant qu'un programme se comporte différemment selon la façon de le compiler.
*Il peut être désorientant qu'un programme se comporte différemment selon la façon de le compiler.

[[Catégorie:Fonctions de base en langage C]]

Version du 7 juin 2008 à 08:34

Début de la boite de navigation du chapitre
assert.h
Icône de la faculté
Chapitre no {{{numéro}}}
Leçon : Fonctions de base en langage C
Chap. préc. :Sommaire
Chap. suiv. :ctype.h
fin de la boite de navigation du chapitre
En raison de limitations techniques, la typographie souhaitable du titre, « Fonctions de base en langage C : assert.h
Fonctions de base en langage C/assert.h
 », n'a pu être restituée correctement ci-dessus.

Description

Ce fichier d'include ne définit qu'une seule macro : assert(expression). Si expression est fausse (ou égale à 0), alors un message d'erreur est affiché et le programme est arrêté par abort :

Type de message d'erreur :

"assertion \"%s\" failed: file \"%s\", line %d\n"
"expression", __FILE__, __LINE__);

Si vous définissez la macro NDEBUG, la macro assert n'est pas prise en compte.

Exemple

Le programme assert.c s'arrête par assert si on lui passe des paramètres.

// Compilation : gcc -Wall -pedantic -o assert.exe assert.c
// Compilation en ignorant assert : gcc -DNDEBUG -Wall -pedantic -o assert.exe assert.c
#include <stdio.h>
#include <assert.h>
int main(int argc, char *argv[])
{
   assert(argc == 1);
   (void)puts("Appel sans parametre.");
   return 0;
}

Résultats d'exécution :

MacMini-TM:~/Documents/exemples_c thierry$ ./assert.exe Appel sans parametre.
MacMini-TM:~/Documents/exemples_c thierry$ ./assert.exe  param
assert.c:5: failed assertion `argc == 1'
Abort trap

Remarques

  • Un message d'erreur tel que celui généré par assert n'est pas acceptable dans un code de production : il n'est pas compréhensible par un utilisateur et ne lui permet pas de savoir d'où vient le problème.
  • assert peut être cependant utile pendant les phases de mises au point. Les erreurs détectées doivent être prises en compte d'une autre façon et exprimées par des messages plus compréhensibles. Les autres assertions qui n'ont pas été rencontrées pourront être laissées dans le code et rendues inactives à l'aide de NDEBUG.
  • Il peut être désorientant qu'un programme se comporte différemment selon la façon de le compiler.