Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C++] Assert nur bei debug ausführen



SeeksTheMoon
09-09-2005, 11:59
Ich möchte in meinem Code assert() benutzen, allerdings nur wenn "debug" definiert ist, d.h. wenn ich in meinem Code ein #define debug stehen habe.

Ich bin allerdings schreibfaul und habe keine Lust das jedesmal so zu schreiben:

#ifdef debug
assert(bla);
#endif

Es wäre nett wenn ich das ifdef und endif nicht jedesmal schreiben muss.
Eine Möglichkeit wäre ein Makro ASSERT, dass die obigen 3 Zeilen simuliert.
Aber kann man überhaupt Makrodefinitionen in einem Makro schreiben?

Eine Funktion
void ASSERT(bool bla) {
#ifdef debug
assert(bla);
#endif
}
wäre noch möglich, aber dann hab ich in meinem Release-Code sinnlose Funktionsaufrufe stehen, weil die Funktion dann leer ist.

Gibt es sonst noch eine Möglichkeit?

peschmae
09-09-2005, 12:06
If the macro NDEBUG was defined at the moment <assert.h> was last
included, the macro assert() generates no code, and hence does nothing
at all. Otherwise, the macro assert() prints an error message to stan‐
dard error and terminates the program by calling abort() if expression
is false (i.e., compares equal to zero).


d.h. du willst eigentlich gar nix machen weil das schon bedacht wurde.

MfG Peschmä

SeeksTheMoon
09-09-2005, 12:25
ok, für assert wäre das dann gelöst.
(ich hätte ja auch mal auf die Idee kommen können, die manpage von assert zu lesen :D)

Aber für Debug-Textausgaben kann ich das noch gebrauchen. (also assert z.B. durch printf im obigen Text ersetzen)
Da kann man ja gleich NDEBUG statt debug benutzen.
(hoffentlich steht das jetzt in keiner manpage :D)