Heim > Web-Frontend > js-Tutorial > Zusammenfassung der Verwendung der Funktion „asser()' (empfohlen)

Zusammenfassung der Verwendung der Funktion „asser()' (empfohlen)

高洛峰
Freigeben: 2017-02-03 14:29:18
Original
1712 Leute haben es durchsucht

Der Prototyp des

assert-Makros ist in definiert. Seine Funktion besteht darin, die Programmausführung zu beenden, wenn seine Bedingung einen Fehler zurückgibt:

#include <assert.h>
void assert( int expression );
Nach dem Login kopieren

Die Funktion von Assert besteht darin, den Ausdruck Ausdruck auszuwerten. Wenn sein Wert falsch ist (dh 0), wird zunächst eine Fehlermeldung an stderr ausgegeben und dann das Programm durch Aufrufen von Abort beendet. Bitte schauen Sie sich die folgende Programmauflistung badptr.c an:

#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;
}
Nach dem Login kopieren
[root@localhost error_process]# gcc badptr.c
[root@localhost error_process]# ./a.out
a.out: badptr.c:14: main: Assertion `fp&#39; failed.
Nach dem Login kopieren

Der Nachteil der Verwendung von Assert() besteht darin, dass häufige Aufrufe die Leistung des Programms Adds stark beeinträchtigen zusätzlicher Overhead. Nach dem Debuggen können Sie den Assert-Aufruf deaktivieren, indem Sie #define NDEBUG vor der Anweisung einfügen, die #include enthält. Der Beispielcode lautet wie folgt:

#include <stdio.h>
#define NDEBUG
#include <assert.h>
Nach dem Login kopieren

Verwendung Zusammenfassung Hinweise:

1) Überprüfen Sie die Rechtmäßigkeit der eingehenden Parameter zu Beginn der Funktion, wie zum Beispiel:

int resetBufferSize(int nNewSize)
{
  //功能:改变缓冲区大小,
  //参数:nNewSize 缓冲区新长度
  //返回值:缓冲区当前长度
  //说明:保持原信息内容不变   nNewSize<=0表示清除缓冲区
  assert(nNewSize >= 0);
  assert(nNewSize <= MAX_BUFFER_SIZE);
  ...
}
Nach dem Login kopieren

2) Jede Behauptung prüft nur einen Bedingung: Denn wenn mehrere Bedingungen gleichzeitig getestet werden und die Behauptung fehlschlägt, ist es unmöglich, intuitiv zu bestimmen, welche Bedingung fehlgeschlagen ist, z. B.:

Schlecht:

assert(nOffset>=0 && nOffset+nSize<=m_nInfomationSize);
Nach dem Login kopieren

Gut:

assert(nOffset >= 0);
assert(nOffset+nSize <= m_nInfomationSize);
Nach dem Login kopieren

3) Anweisungen, die die Umgebung ändern, können nicht verwendet werden, da „asser“ nur in DEBUG wirksam wird. Wenn Sie dies tun, treten Probleme auf Das Programm wird tatsächlich ausgeführt, z. B.:

Fehler:

assert(i++ < 100);
Nach dem Login kopieren

Dies liegt daran, dass vor der Ausführung ein Fehler auftritt, z. B. i = 100 Diese Anweisung wird nicht ausgeführt, dann wird der Befehl i++ nicht erzwungen.

Richtig:

assert(i < 100);
i++;
Nach dem Login kopieren

4) Die Behauptung und die nachfolgenden Anweisungen sollten in einer leeren Zeile stehen, um ein Gefühl der logischen und visuellen Konsistenz zu erzeugen.

5) Assert kann an manchen Stellen die bedingte Filterung nicht ersetzen.

Das Obige ist eine Zusammenfassung der vom Herausgeber eingeführten Funktion „asser()“. Ich hoffe, dass sie für Sie hilfreich ist. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Herausgeber wird Ihnen antworten rechtzeitig.

Weitere Artikel zur Zusammenfassung der Verwendung der Funktion „asser()“ (empfohlen) finden Sie auf der chinesischen PHP-Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage