Heim > php教程 > PHP开发 > Zusammenfassung der Verwendung der Funktion „asser()'.

Zusammenfassung der Verwendung der Funktion „asser()'.

黄舟
Freigeben: 2016-12-28 13:19:26
Original
2010 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 aktuellen Ausdruck zu berechnen. 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 sehen Sie sich die folgende Programmliste 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“ fehlgeschlagen.

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

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

Verwendungszusammenfassung und Vorsichtsmaßnahmen:

1) Überprüfen Sie die Rechtmäßigkeit der eingehenden Parameter zu Beginn der Funktion, z. B.

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

2) Jede Behauptung testet nur eine Bedingung, da mehrere Bedingungen gleichzeitig getestet werden Wenn die Behauptung fehlschlägt, kann sie nicht intuitiv beurteilen, welche Bedingung fehlgeschlagen ist, wie zum Beispiel:

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) Aussagen, die sich ändern Die Umgebung kann nicht verwendet werden, da sie nur bei DEBUG wirksam wird. Wenn Sie dies tun, treten Probleme auf, wenn das Programm tatsächlich ausgeführt wird, z. B.:

Fehler:

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

Dies liegt daran, dass, wenn ein Fehler auftritt, z. B. vor der Ausführung von i=100, diese Anweisung nicht ausgeführt wird und der Befehl i++ nicht ausgeführt wird.

Richtig:

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

4) Die Behauptung und die nachfolgenden Anweisungen sollten in einer Leerzeile 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 Verwendung der Funktion „asser()“ Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!


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 Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage