Seitenleiste

assert()

assert() ist definiert in der Headerdatei ''assert.h'' in C und ''cassert'' in C++.

Funktion

assert() überprüft eine Behauptung. Die Behauptung wird gegen 0 überprüft. Ist der Wert 0 (false), wird auf die Standard-Fehler-Ausgabe eine (kompilerabhängige) Meldung geschrieben, die die aufgestellte Behauptung, den Dateinamen des Quelltext und die Zeile beinhaltet. Nach der Ausgabe der Meldung über die Standard-Funktion abort() abgebrochen.

assert() ist als Makro implementiert. Das Makro kann durch Deklarierung des Makros NDEBUG abgeschaltet werden, so dass eine Release Version durch keinerlei Überprüfungen ausgebremst wird. Hierfür kann zum einen das Makro definiert werden, bevor assert.h eingebunden wird:

#define NDEBUG

Über die Compiler-Optionen lässt sich das Debug-Flag auch über den Compileraufruf, so dass das Makro zum Beispiel über ein Makeskript gesteuert werden kann.

Signatur

#include <assert.h>
void assert( int expression );

expression: zu überprüfender Ausdruck

Fehlerquellen

Als Expression sollte ein Ausdruck übergeben werden, der den Programmzustand nicht verändert. Eine Variablenzuweisung oder Inkrement bzw. Dekrementoperatoren werden so nur ausgeführt, wenn das Programm getestet wird, aber nicht in der Releaseversion. Das Programm würde in dem Fall also in der Debug und Releaseversion unterschiedliche Ergebnisse liefern.

Beispiel

// #define NDEBUG     // Kommentarzeichen entfernen, falls nicht getestet werden soll
#include <assert.h>
 
int add( int s1, int s2 )
{
  return s1 + s2;
}
 
int main( void )
{
  int temp = add( 1, 2 );
 
  assert( temp == 3 );
 
  return EXIT_SUCCESS; 
}

siehe auch

-