Le prototype de la macro assert est défini dans
#include <assert.h> void assert( int expression );
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 :
#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; }
[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
#include <stdio.h> #define NDEBUG #include <assert.h>
Résumé d'utilisation et précautions : <🎜. >
1) Vérifiez la légalité des paramètres entrants au début de la fonction, tels queint resetBufferSize(int nNewSize) { //功能:改变缓冲区大小, //参数:nNewSize 缓冲区新长度 //返回值:缓冲区当前长度 //说明:保持原信息内容不变 nNewSize<=0表示清除缓冲区 assert(nNewSize >= 0); assert(nNewSize <= MAX_BUFFER_SIZE); ... }
assert(nOffset>=0 && nOffset+nSize<=m_nInfomationSize);
assert(nOffset >= 0); assert(nOffset+nSize <= m_nInfomationSize);
assert(i++ < 100);
assert(i < 100); i++;
5) À certains endroits, l'assert ne peut pas remplacer le filtrage conditionnel.