ein Kapitel zurück                                           ein Kapitel weiter

Mit der Funktion....

#include <assert.h>

void assert(int ausdruck);  

...haben sie die Möglichkeit ihr Programm auf logische Fehler zu testen. Wenn der 'ausdruck==0' ist wird das Programm mit einer Fehlermeldung beendet. Ein einfaches Beispiel: Wir dividieren 2 Zahlen miteinander und keine der Zahl darf 0 oder negativ sein und der Teiler soll nicht größer als der Nenner sein.....

/*Download:asrt.c*/
#include <stdio.h> #include <assert.h> int divide(int zahl1, int zahl2) { assert( (zahl1>=0 && zahl1>=zahl2) && (zahl2>=0) ); return zahl1/zahl2; } int main() { printf("%d / %d = %d\n",5,2,divide(5,2)); printf("%d / %d = %d\n",3,4,divide(3,4)); printf("%d / %d = %d\n",4,4,divide(4,4)); return 0; }

Das Programm wir mit der Fehlermeldung, die in etwa so aussieht abgebrochen...

assert.c line 6 failed assertion '(zahl1>=0 && zahl1>=zahl2) && (zahl2>=0)'  

Diese Art zu testen eignet sich sehr gut zu größern Projekten. Damit man jetzt zum Beispiel bei großen Projekten nicht den ganzen Code durchsuchen muss um die assert() - Anweisungen zu entfernen muß man nur das MAKRO....

NDEBUG  

...definieren und der Compiler ignoriert alle assert Aufrufe. Dies muß aber vor....

#include <assert.h>  

...eingefügt werden. Hier unser Programm wo die assert-Funktion ignoriert wird....

/*Download:asrt2.c*/
#include <stdio.h> #define NDEBUG #include <assert.h> int divide(int zahl1, int zahl2) { assert( (zahl1>=0 && zahl1>=zahl2) && (zahl2>=0) ); return zahl1/zahl2; } int main() { printf("%d / %d = %d\n",5,2,divide(5,2)); printf("%d / %d = %d\n",3,4,divide(3,4)); printf("%d / %d = %d\n",4,4,divide(4,4)); return 0; }

ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf