Lektion 31:

assert

 Das hantieren mit Arrays ist gefährlich und kann leicht zu Programmabbrüchen führen, wenn auf Elemente außerhalb des Arrays zugegriffen wird. Leider ist das Verhalten bei solchen Fehlern in C++ undefiniert. Es könnte auch sein, daß das Programm normal weiterläuft. Und wenn Sie großes Pech haben, dann äußert sich der Fehler erst, wenn Sie das Programm bereits verkauft haben. Um dies zu vermeiden gibt es das Makro assert. Ich werde noch nicht erklären, was Makros sind. Für assert reicht es, zu wissen, daß dieses Makro wie eine Funktion

void assert(bool assertion);

aufgerufen werden kann.

"Assert" heißt soviel wie "bestehen auf". Das Argument von assert ist eine Behauptung, auf der Sie bestehen. Falls diese Behauptung einmal nicht wahr ist, dann wird das Programm sofort beendet. Damit Sie sehen, woran der Fehler lag, wird auch eine kleine Meldung ausgegeben, der Sie unter anderem die Zeilennummer entnehmen können, wo der Fehler aufgetreten ist.

   void push(int i) // ein Element oben drauflegen
   {
      assert(topIndex<STACK_SIZE-1);
      topIndex=topIndex+1;
      data[topIndex]=i;
   };
   void pop() // das oberste Element entfernen
   {
      assert(topIndex>-1);
      topIndex=topIndex-1;
   };

Weil das Überprüfen dieser Behauptungen Zeit kostet und damit das Programm langsamer macht, gibt es die Möglichkeit, vor der Auslieferung des Programms alle assert-Aufrufe an zentraler Stelle auszuschalten.

 Um assert verwenden zu können, müssen Sie zuerst <assert.h> inkludieren.

Übung:

Um zu sehen, wie assert wirkt, bauen Sie entsprechende Fehler in die main-Funktion ein.

Einsendungen:

Lösung


Falls Ihnen Fehler im Text auffallen oder Sie Verbesserungsvorschläge haben, dann schicken Sie mir bitte eine Mail. Ich werde mich dann sofort darum kümmern.
[aktuelle Version] [inhalt] [index]      [Fehlerkorrektur, Verbesserungsvorschlag]

© Volkard Henkel <volkard@normannia.de>, last update: 08/25/00