// Debugout nicht verwenden (zuminest denke ich das es so geht)
5
#define SF_DEBUGOUT (void) 0;
Jetzt möchte ich die untere funktion abschalten, jedoch geht das nicht
da
SF_DEBUGOUT ja leider definiert ist (mit void 0), gibt es hier schicke
wege das irgendwie doch zu tun?
eh, wir haben aber nicht aneinander vorbei geredet?
Was ich da Plane ist das er die sachen nicht mehr mit ein compiled,
sprich die debug funktionen komplett raus nimmt.
>>> eh, wir haben aber nicht aneinander vorbei geredet?
Doch, ich denke schon.
Dir geht es darum, wie du mit diesem #define dann die eigentliche
Funktion aus dem Compilat auch noch entfernen kannst.
Zu diesem Zwecke mach dir klar, dass es einen Unterschied zwischen
1
#ifdef
und
1
#if
gibt.
Ersteres fragt lediglich ab, ob es ein Makro gibt.
Letzteres kannst du zb verwenden um auch noch den Wert eines Makros
auszuwerten
1
#if SF_DEBUGOUT == 0
2
...
3
#endif
Genauer gesagt, gilt für #if dasselbe was auch für ein normales C-if
gilt: Es erwartet einen Ausdruck und der kann 0 oder nicht 0 sein. Je
nachdem wird dann vom #if der nachfolgende Textblock mitgenommen oder
nicht.
David Mueller schrieb:> das muss scheinbar so aussehen
Nein, einfach leer lassen sollte genauso gehen. Der Unterschied ist
nur, dass das „((void) 0)“ syntaktisch eine Anweisung ist (welche
keine Wirkung hat), während beim Leerlassen eine leere Anweisung
entsteht (durch das nachfolgende Semikolon, welches man normalerweise
hinter dem Makroaufruf noch schreibt).
Eine Warnung kann ein Compiler für beide Fälle natürlich generieren,
oder eben auch nicht. Da wir hier im GCC-Forum sind: mir ist nicht
bekannt, dass GCC eine leere Anweisung warnen würde.
Dani Zwirner schrieb:> würde der Kompiler einen Fehler melden.
Was ja auch nicht schlimm wäre.
Der kanonische Weg, um den Inhalt eines Makros sich so benehmen zu
lassen wie eine Funktion ist:
1
#define A(x) do {} while (0)
Würde ich aber für den Debug-Kram nur machen, wenn's unbedingt sein
muss. Normalerweise stehen solche debug-Print-Anweisungen nur mehr
mutterseelenallein auf einer Zeile: