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.