Le prototype de la macro assert est défini dans . Sa fonction est de terminer l'exécution du programme si sa condition renvoie une erreur :
1 2 | # include <assert.h>
void assert( int expression );
|
Copier après la connexion
La fonction d'assert. consiste à calculer l'expression actuelle, si sa valeur est fausse (c'est-à-dire 0), il imprime d'abord un message d'erreur sur stderr, puis termine le programme en appelant abort. Veuillez consulter la liste de programmes suivante badptr.c :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # include <stdio.h>
# include <assert.h>
# include <stdlib.h>
int main( void )
{
FILE *fp;
fp = fopen ( "test.txt" , "w" );
assert( fp );
fclose( fp );
fp = fopen ( "noexitfile.txt" , "r" );
assert( fp );
fclose( fp );
return 0;
}
|
Copier après la connexion
[root@localhost error_process]# gcc badptr.c
[root@localhost error_process]# ./a.out
a. out : badptr.c:14 : main : l'assertion `fp' a échoué.
L'inconvénient de l'utilisation de assert() est que des appels fréquents affecteront considérablement les performances du programme et ajouteront une surcharge supplémentaire. Après le débogage, vous pouvez désactiver l'appel assert en insérant #define NDEBUG avant l'instruction contenant #include . L'exemple de code est le suivant :
1 2 3 | # include <stdio.h>
#define NDEBUG
# include <assert.h>
|
Copier après la connexion
Résumé d'utilisation et précautions : <🎜. >
1) Vérifiez la légalité des paramètres entrants au début de la fonction, tels que
1 2 3 4 5 6 7 8 9 10 | int resetBufferSize(int nNewSize)
{
assert(nNewSize >= 0);
assert(nNewSize <= MAX_BUFFER_SIZE);
...
}
|
Copier après la connexion
2) Chaque assert ne teste qu'une seule condition, car lorsque plusieurs conditions sont testées en même temps , si l'assertion échoue, elle ne peut pas juger intuitivement quelle condition a échoué, par exemple :
Mauvais :
1 | assert(nOffset>=0 && nOffset+nSize<=m_nInfomationSize);
|
Copier après la connexion
Bon :
1 2 | assert(nOffset >= 0);
assert(nOffset+nSize <= m_nInfomationSize);
|
Copier après la connexion
3) Déclarations qui changent l'environnement ne peut pas être utilisé car assert Cela ne prend effet que dans DEBUG. Si vous faites cela, vous rencontrerez des problèmes lorsque le programme est réellement en cours d'exécution, tels que :
Erreur :
Copier après la connexion
. En effet, si une erreur se produit, par exemple avant l'exécution i=100, alors cette instruction ne sera pas exécutée, alors la commande i ne sera pas exécutée.
Correct :
Copier après la connexion
4) L'assertion et les déclarations suivantes doivent figurer sur une ligne vide pour créer un sentiment de cohérence logique et visuelle.
5) À certains endroits, l'assert ne peut pas remplacer le filtrage conditionnel.
Ce qui précède est un résumé de l'utilisation de la fonction assert(). Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !