Maison > interface Web > js tutoriel > Résumé de l'utilisation de la fonction assert() (recommandé)

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

高洛峰
Libérer: 2017-02-03 14:29:18
original
1708 Les gens l'ont consulté

Le prototype de la

assert macro 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 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;
}
Copier après la connexion
[root@localhost error_process]# gcc badptr.c
[root@localhost error_process]# ./a.out
a.out: badptr.c:14: main: Assertion `fp&#39; failed.
Copier après la connexion

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 . L'exemple de code est le suivant :

#include <stdio.h>
#define NDEBUG
#include <assert.h>
Copier après la connexion

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);
  ...
}
Copier après la connexion

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);
Copier après la connexion

Bon :

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

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);
Copier après la connexion

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++;
Copier après la connexion

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 !

É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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal