Discussion:
NDEBUG
(zu alt für eine Antwort)
Bonita Montero
2014-04-18 20:20:51 UTC
Permalink
Raw Message
Wieso heißt das Symbol das assert abschaltet eigentlich NDEBUG?
Man hätte es doch invertiert handhaben und es DEBUG nennen und
assert damit anschalten können. Oder man hätte NDEBUG auch
RELEASE oder so nennen können. Gibt's da irgendwelche besonderen
"sprachphilsophischen" Gründe?
--
http://facebook.com/bonita.montero
Peter J. Holzer
2014-04-19 10:25:02 UTC
Permalink
Raw Message
Post by Bonita Montero
Wieso heißt das Symbol das assert abschaltet eigentlich NDEBUG?
Weil die Bell-Labs-Leute eine gewisse Neigung hatten, Vokale
einzusparen?
Post by Bonita Montero
Man hätte es doch invertiert handhaben und es DEBUG nennen und
assert damit anschalten können.
NEIN!!!!elf!!!

Assertions sollen bitte immer aktiv sein, insbesondere im Produktivcode.
Wenn man die schon abschalten muss, dann soll man das bitte bewusst
machen müssen.
Post by Bonita Montero
Oder man hätte NDEBUG auch RELEASE oder so nennen können.
Wäre eine Möglichkeit, impliziert aber, dass man das für den Release
einschalten soll. Vielleicht sollte man NDEBUG lieber
REAL_PROGRAMMERS_DONT_EAT_QUICHE nennen ;-).

hp
--
_ | Peter J. Holzer | Fluch der elektronischen Textverarbeitung:
|_|_) | | Man feilt solange an seinen Text um, bis
| | | ***@hjp.at | die Satzbestandteile des Satzes nicht mehr
__/ | http://www.hjp.at/ | zusammenpaßt. -- Ralph Babel
Bonita Montero
2014-04-19 11:57:31 UTC
Permalink
Raw Message
Post by Peter J. Holzer
Post by Bonita Montero
Man hätte es doch invertiert handhaben und es DEBUG nennen und
assert damit anschalten können.
NEIN!!!!elf!!!
Assertions sollen bitte immer aktiv sein, insbesondere im Produktivcode.
Wenn man die schon abschalten muss, dann soll man das bitte bewusst
machen müssen.
Man hätte ja ggf mit optimierungen und DEBUG kompilieren
können. Und ich finde ein #ifdef(DEBUG) liest sich besser
als ein #ifndef(NDEBUG).
--
http://facebook.com/bonita.montero
Thomas Koenig
2014-04-19 12:56:02 UTC
Permalink
Raw Message
Post by Bonita Montero
Und ich finde ein #ifdef(DEBUG) liest sich besser
als ein #ifndef(NDEBUG).
"Liest sich besser" war anscheinend kein wesentliches
Kriterium bei der Entwicklung der Programmiersprache C.
Achim Peters
2014-04-19 13:32:47 UTC
Permalink
Raw Message
Post by Bonita Montero
Post by Bonita Montero
Man hätte es doch invertiert handhaben und es DEBUG nennen und
assert damit anschalten können.
Man hätte ja ggf mit optimierungen und DEBUG kompilieren
können. Und ich finde ein #ifdef(DEBUG) liest sich besser
als ein #ifndef(NDEBUG).
Von dem #ifndef(NDEBUG) zum Abschalten der asserts siehst Du ja nichts.
Für Deine eigene Zwecke kannst Du Dir ja ein DEBUG definieren.

Wenn Du nicht immer ein Flag beim Übersetzen mitgeben willst (-DNDEBUG
für Prod und -DDEBUG beim Test), kannst Dir ja zentral irgendwo ein

#ifndef(NDEBUG)
#define DEBUG
#endif

hinschreiben.

Bye
Achim
Bonita Montero
2014-04-19 15:39:30 UTC
Permalink
Raw Message
Post by Achim Peters
Von dem #ifndef(NDEBUG) zum Abschalten der asserts siehst Du ja nichts.
Ne, aber eigener Debug-Code müsste so "gemantelt" sein.
Post by Achim Peters
#ifndef(NDEBUG)
#define DEBUG
#endif
Schon klar.
--
http://facebook.com/bonita.montero
Marcel Müller
2014-04-19 21:31:40 UTC
Permalink
Raw Message
Post by Peter J. Holzer
Assertions sollen bitte immer aktiv sein, insbesondere im Produktivcode.
Wenn man die schon abschalten muss, dann soll man das bitte bewusst
machen müssen.
Geschmackssache. Ein gut durchgetesteter Produktivcode benötigt das
nicht mehr unbedingt, zumal manche Assertion mehr Ressourcen brauchen
als der eigentliche Code. Z.B. braucht ein Intersection-Algorithmus für
sortierte Mengen weniger Vergleiche, als die Assertion auf die
Precondition, die überprüft, dass auch wirklich nur sortierte Arrays
verwendet werden. Das stellt dann den Sinn des ganzen (schnellen)
Algorithmus in Frage. Ähnliches gilt für die Prüfung auf thread-safety,
wo gecheckt wird, dass man bestimmte Funktionen nur unter gegenseitigem
Ausschluss nutzen darf.


Marcel
Rainer Weikusat
2014-04-19 22:12:51 UTC
Permalink
Raw Message
Post by Peter J. Holzer
Post by Bonita Montero
Wieso heißt das Symbol das assert abschaltet eigentlich NDEBUG?
Weil die Bell-Labs-Leute eine gewisse Neigung hatten, Vokale
einzusparen?
Insofern man Begriffe abkuerzen muss, zB, weil man tools hat, die nur
Namen mit maximal sechs Zeichen unterscheiden koennen (NDEBUG vs
NODEBUG) kann man Vokale eher entbehren, als Konsonanten: Davon gibt es
weniger, deswegen kann man sie eher 'erraten'. ZB lautet der erste
Halbsatz dieses Textes ohne Vokale

nsfrn mn Bgrff bkrzn mss

was man immer noch recht einfach verstehen kann, waehrend das bei
einer Version ohne Konsonanten

ioe a ee auee u

ziemlich aussichtslos ist.
Post by Peter J. Holzer
Post by Bonita Montero
Man hätte es doch invertiert handhaben und es DEBUG nennen und
assert damit anschalten können.
NEIN!!!!elf!!!
Assertions sollen bitte immer aktiv sein, insbesondere im Produktivcode.
Wenn man die schon abschalten muss, dann soll man das bitte bewusst
machen müssen.
Code, der mit einer Meldung a la "assertion failed on line ..."
"abstuerzt" ist nicht gerade nuetzlich ...
Peter J. Holzer
2014-04-19 22:25:18 UTC
Permalink
Raw Message
Post by Rainer Weikusat
Post by Peter J. Holzer
Post by Bonita Montero
Wieso heißt das Symbol das assert abschaltet eigentlich NDEBUG?
[...]
Post by Rainer Weikusat
Post by Peter J. Holzer
Post by Bonita Montero
Man hätte es doch invertiert handhaben und es DEBUG nennen und
assert damit anschalten können.
NEIN!!!!elf!!!
Assertions sollen bitte immer aktiv sein, insbesondere im Produktivcode.
Wenn man die schon abschalten muss, dann soll man das bitte bewusst
machen müssen.
Code, der mit einer Meldung a la "assertion failed on line ..."
"abstuerzt" ist nicht gerade nuetzlich ...
Aber besser als Code, der nicht abstürzt und dafür fröhlich andere Dinge
macht als der Programmierer wollte.

hp
--
_ | Peter J. Holzer | Fluch der elektronischen Textverarbeitung:
|_|_) | | Man feilt solange an seinen Text um, bis
| | | ***@hjp.at | die Satzbestandteile des Satzes nicht mehr
__/ | http://www.hjp.at/ | zusammenpaßt. -- Ralph Babel
Achim Peters
2014-04-20 02:15:21 UTC
Permalink
Raw Message
Post by Rainer Weikusat
Code, der mit einer Meldung a la "assertion failed on line ..."
"abstuerzt" ist nicht gerade nuetzlich ...
Komisch. In einer Situation, in der man asserts normalerweise im Code
einsetzt, ist diese Meldung so ziemlich das aller-, aller-nützlichste,
was ich mir zur Fehlererkennung und -analyse vorstellen kann, wenn ich
es vergleiche mit der Reaktion des Progamms in dieser Fehlersituation
ohne das assert, ohne die Meldung und ohne diesen "Absturz" und
stattdessen mit einem Absturz 10 km hinter diese Stelle als
Folge-Folge-Folge-Fehler, der nur schwerlich auf die an der
assert-Stelle klar definierte Ursache zurückgeführt werden kann.

Bye
Achim

Gerald Breuer
2014-04-19 17:23:23 UTC
Permalink
Raw Message
Post by Bonita Montero
Wieso heißt das Symbol das assert abschaltet eigentlich NDEBUG?
Man hätte es doch invertiert handhaben und es DEBUG nennen und
assert damit anschalten können. Oder man hätte NDEBUG auch
RELEASE oder so nennen können. Gibt's da irgendwelche besonderen
"sprachphilsophischen" Gründe?
Weil man sagen wollte: Debug-Code bleibt unter allen Umständen drin,
außer man wählt ihn explizit ab.
Loading...