===================== Alternative zu assert [TOC] ===================== Es war ärgerlich, dass wir die Zugriffsfunktionen nicht `noexcept` deklarieren konnten. Das können wir erreichen, indem wir unsere eigene Version von _assert_ formulieren. Aufgabe ======= Entwickeln Sie Ihre eigene Version _assert.hpp_ mit dem Makro _ASSERT_, das als Ersatz für `` mit dem Makro _assert_ dient. Dabei sind folgende Punkte zu beachten: * Wenn das Makro _NDEBUG_ definiert ist, sollte die Assertion inaktiv sein. Sie können das mit `#ifndef NDEBUG` überprüfen. * Andernfalls sollte eine mit `noexcept` deklarierte `inline`-Funktion aufgerufen werden mit allen notwendigen Parametern: - Die Bedingung als Zeichenkette (das geht mit dem Präprozessor-Operator `#`, d.h. für den Makroparameter _condition_ mit dem Text `index < size` liefert `#condition` die Zeichenkette `"index < size"`. - Den Dateinamen des Aufrufers, den Sie über das Makro `_``_FILE_``_` erhalten. - Die Zeilennummer, die Sie über das Makro `_``_LINE_``_` erhalten. - Den Funktionsnamen des Aufrufers, den Sie über `_``_func_``_` erhalten. * Diese Funktion sollte im Falle einer fehlschlagenden Assertion auf `std::cerr` eine Fehlermeldung analog zum originalen _assert_ ausgeben und schließlich `std::abort` aufrufen. Achten Sie darauf, dass `noexcept` wirklich sichergestellt ist. Testen Sie es mit einem kleinen Testprogramm, das auf ein _Array_-Element außerhalb des zulässigen Bereichs zuzugreifen versucht. :navigate: up -> doc:index back -> doc:session07/page04 next -> doc:session07/page06