Le prototype de la
assert macro est défini dans
#include <assert.h> void assert( int expression );
. La fonction de assert est d'évaluer l'expression. Si sa valeur est fausse (c'est-à-dire 0), alors 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: Assertion `fp' failed.
L'inconvénient de l'utilisation de assert() est que les appels fréquents affecteront grandement les performances du programme Adds. frais généraux supplémentaires. 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>
Utilisation. Notes récapitulatives :
1) Vérifiez la légalité des paramètres entrants au début de la fonction, tels que :
int resetBufferSize(int nNewSize) { //功能:改变缓冲区大小, //参数:nNewSize 缓冲区新长度 //返回值:缓冲区当前长度 //说明:保持原信息内容不变 nNewSize<=0表示清除缓冲区 assert(nNewSize >= 0); assert(nNewSize <= MAX_BUFFER_SIZE); ... }
2) Chaque assert n'en vérifie qu'un condition, Parce que lorsque plusieurs conditions sont testées en même temps, si l'assertion échoue, il est impossible de déterminer intuitivement quelle condition a échoué, comme :
Mauvais :
assert(nOffset>=0 && nOffset+nSize<=m_nInfomationSize);
Bon :
assert(nOffset >= 0); assert(nOffset+nSize <= m_nInfomationSize);
3) Les instructions qui modifient l'environnement ne peuvent pas être utilisées, car l'assertion 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, comme :
Erreur :
assert(i++ < 100);
En effet, s'il y a une erreur, telle que i=100 avant l'exécution, alors cette instruction ne sera pas exécutée, alors la commande i ne sera pas implémentée.
Correct :
assert(i < 100); i++;
4) Les déclarations assert et suivantes doivent être 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() présentée par l'éditeur. J'espère que cela vous sera utile. Si vous avez des questions, veuillez me laisser un message et l'éditeur vous répondra. à vous à temps.
Pour plus d'articles sur le résumé (recommandé) de l'utilisation de la fonction assert(), veuillez faire attention au site Web PHP chinois !