« Fonctions de base en langage C/assert.h » : différence entre les versions
Contenu supprimé Contenu ajouté
maintenance |
|||
Ligne 1 : | Ligne 1 : | ||
{{Chapitre |
{{Chapitre |
||
|titre=assert.h |
| titre = assert.h |
||
⚫ | |||
|titre_leçon=Fonctions de base en langage C |
|||
| leçon = [[../]] |
|||
⚫ | |||
⚫ | |||
|leçon=[[Langage C/Fonctions de base|Fonctions de base en langage C]] |
|||
| précédent = [[../|sommaire]] |
|||
⚫ | |||
| |
| suivant = [[../ctype.h/]] |
||
⚫ | |||
|suivant=[[Langage C/Fonctions de base/ctype.h|ctype.h]] |
|||
⚫ | |||
}} |
}} |
||
== 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> : |
||
Type de message d'erreur : |
Type de message d'erreur : |
||
<pre> |
|||
<source lang="text"> |
|||
"assertion \"%s\" failed: file \"%s\", line %d\n" |
"assertion \"%s\" failed: file \"%s\", line %d\n" |
||
"expression", __FILE__, __LINE__); |
"expression", __FILE__, __LINE__); |
||
</ |
</source> |
||
Si vous définissez la macro NDEBUG, la macro <code>assert</code> n'est pas prise en compte. |
Si vous définissez la macro NDEBUG, la macro <code>assert</code> n'est pas prise en compte. |
||
Ligne 36 : | Ligne 37 : | ||
''Résultats d'exécution'' : |
''Résultats d'exécution'' : |
||
<source lang="bash"> |
|||
<pre> |
|||
MacMini-TM:~/Documents/exemples_c thierry$ ./assert.exe |
MacMini-TM:~/Documents/exemples_c thierry$ ./assert.exe |
||
Appel sans parametre. |
Appel sans parametre. |
||
Ligne 42 : | Ligne 43 : | ||
assert.c:5: failed assertion `argc == 1' |
assert.c:5: failed assertion `argc == 1' |
||
Abort trap |
Abort trap |
||
</ |
</source> |
||
== Remarques == |
== Remarques == |
Version du 17 février 2010 à 13:41
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.