Karl heinz Buchegger schrieb:
> Normalerweise macht man das durch den Compiler selbst
Das ist soweit richtig, allerdings noch etwas verbesserungsfähig.
Es gibt ein Makro assert(irgendwas).
Das prüft in einer Debugversion zur Laufzeit die
Bedingung (irgendwas) und gibt bei false eine entsprechende
Meldung nach stderr aus und hält das Programm an - nach
ANSI-Standard zumindest.
In einer Releaseversion wird die Verwendung dieses Makros
komplett wegdefiniert und kostet somit weder Rechenzeit noch
Programmcode. Genial schlicht und genial hilfreich.
Mangels stderr hilft das bei einem MC meist nicht viel und
ist in der avr-libc deshalb nur aktiv, wenn man gleichzeitig
__ASSERT_USE_STDERR definiert hat; vgl.
http://www.nongnu.org/avr-libc/user-manual/group__avr__assert.html
(Und selbst dann wird bei avr-libc nur die Meldung ausgegeben,
und nichts angehalten - das nur am Rande.)
Falls es definiert wird, hängt nun aber für assert() die Frage,
ob es sich gerade um die Debugversion handelt, nicht am
Vorhandensein von DEBUG, sondern am Nichtvorhandensein von NDEBUG.
Es ist etwa so definiert:
1 | #ifndef NDEBUG
|
2 | #define assert(a) ...
|
3 | #endif
|
Deshalb ist es ausserhalb der AVR-Welt sicher geschickter,
nicht das #define DEBUG auszukommentieren, sondern in
ein #define NDEBUG umzuwandeln. Sonst wird assert nicht
wegdefiniert.
Wie gesagt bei avr-libc meist egal, aber irgendwann
programmiert man vielleicht auch wieder auf einem PC.
---
Zurück zur eigentlichen Frage: das Filtern des Quelltextes
nach DEBUG halte ich auch für sinnlos.
Alleine deshalb, weil man ein Programm irgendwann doch mal
ändern muß. Dann will man das Weggelassene ja ncht händisch
wieder einbauen.
So etwas würde Sinn machen, wenn man den Quelltext hergeben
muß, aber Teile des Programms nicht gerne zeigen würde (sei
es, weil es einem peinlich ist oder weil man dem zukünftigen
Leser das Leben nicht zu leicht machen will).
Aus letzterem Grund hatte ich mal ein Programm an allen Stellen,
die ich nicht zeigen wollte, einen Kommentar "// PRIVAT"
kommentiert. Das waren große Bereiche von erklärendem Kommentar,
Quellenangaben ebenso wie Debugausgaben, die das Verständnis
fördern.
So etwas lässt sich mit normalen Textfiltern leicht
ausblenden (find und fgrep), sodaß man die erleichterte
Version gerne hergeben kann.
So hat der arme Leser weniger Ballast :-)