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ößeren Projekten. Damit man jetzt zum Beispiel bei großen Projekten nicht den ganzen Code durchsuchen muss um die assert() - Anweisungen zu entfernen muss man nur das MAKRO....

NDEBUG  

...definieren und der Compiler ignoriert alle assert Aufrufe. Dies muss 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