Manchmal hat man auch keine Konsole.
Und der Umweg über eine temporäre Variable ist etwas viel Tipparbeit.
Ich benutze immer die Standardfunktion assert(), die gibt (zumindest unter Windows) auch eine Fehlermeldung aus. Da der Ausdruck innerhalb assert() nicht ausgeführt wird wenn man assertions deaktiviert, schummle ich etwas:
Ich packe um jedes connect ein "passert()", was wenn assertions aktiviert sind dasselbe macht wie assert, andernfalls den Befehl trotzdem normal ausführt (preserved assertion, daher das p) - gibts assert eigentlich unter Linux? Da war irgendwas... Das funzt jedenfalls unter Windows:
Code: Alles auswählen
//#define NDEBUG // NDEBUG deaktiviert assert's
#include <cassert>
// preserved assertion (wenn NDEBUG defined ist wird der Ausdruck trotzdem ausgeführt)
inline void passert( bool expression_ )
{
}
#ifndef NDEBUG
#define passert assert
#endif
Weiß aber nich wieso das mit der Inline-Funktion gut geht, müsste der Compiler das nicht wegoptimieren? Inline heißt dich direkt ersetzen (natürlich ist das nur ein Vorschlag, aber da nichts im Rumpf steht bietet sich das wohl an), und dann würde doch auch expression_ nicht ausgewertet werden? Oder ist das so beabsichtigt, für den Fall wie wir ihn gerade haben (bzw. wenn man ein Funktionsaufruf hinschreibt erwartet man, dass Funktionen in Parametern ausgeführt werden (sofern sie nicht hinter einem "false &&" stehen o.ä.)), und alles ist toll?