Contents | Index | < Browse | Browse >
LETTERassertULETTER
Testet eine Bedingung und unterbricht den Programmlauf
Übersicht
#include <assert.h>
assert(x);
int x; // Ausdruck für die Bedingungsprüfung
Portabilität
ANSI
Erklärung
Die Include-Datei "assert.h" definiert lediglich ein einziges Makro nämlich
assert. Man kann damit die Sicherheit seines Programms erhöhen, indem man
Plausibilitätstests einführt. Wenn z. B. eine Funktion einen Parameter
zwischen 0 und 5 erwartet, setze man an ihren Anfang folgendes:
int f(int i)
{
assert(i>0 && i<5)
}
Gilt die bei assert angegebene Bedingung nicht, steigt das Programm bei
einem ungültigen Parameter mit einer Meldung wie
Assertion failed: i>0 && i<5, file "falsch.cc", line 1822
aus - es sei denn, man definiert das Makro NDEBUG, bevor man das Makro benutzt.
In diesem Fall werden die assert-Anweisungen ersatzlos gestrichen und kosten
so weder Laufzeit noch Speicherplatz. Man sollte NDEBUG immer erst dann
definieren, wenn man der Meinung ist, das Programm sei fehlerfrei. Auf jeden
Fall aber vermeide man Bedingungen mit Seiteneffekt.
Beispiel
FILE *fp;
assert(fp = fopen("S:supervisor-startup", "r")) // Ganz schlecht!
Diese Anweisung gibt zwar eine mehr oder weniger aussagekräftige Fehlermeldung
ab, wenn das Programm seine Konfigurationsdatei nicht finden kann, und steigt
dann aus, was durchaus sinnvoll ist - aber irgendwann kommt man vielleicht
doch noch auf die Idee, NDEBUG zu definieren, und dann wird man sich wundern.