Maison > php教程 > PHP开发 > Résumé de l'utilisation de la fonction assert()

Résumé de l'utilisation de la fonction assert()

黄舟
Libérer: 2016-12-28 13:19:26
original
2051 Les gens l'ont consulté

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 :

#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 :

#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 :

#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

int resetBufferSize(int nNewSize)
{
  //功能:改变缓冲区大小,
  //参数:nNewSize 缓冲区新长度
  //返回值:缓冲区当前长度 
  //说明:保持原信息内容不变     nNewSize<=0表示清除缓冲区
  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 :

assert(nOffset>=0 && nOffset+nSize<=m_nInfomationSize);
Copier après la connexion
Bon :

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 :

assert(i++ < 100);
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 :

assert(i < 100);
 i++;
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) !



Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Recommandations populaires
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal