axeljaeger
12-04-2003, 17:57
Ich versuche gerade eine Library zu entwickeln und denke daran, zu Debugzwecken eine Funktion zu bauen,
die Informationen über die Kommandozeile ausgibt, allerdings nur, wenn ein Compilerschalter definiert ist.
Nun bieten sich mir zwei Möglichkeiten an:
1. Eine Version, die den Körper einer Methode nur ausführt, wenn ein flag definiert ist, so etwa:
void printdbg(const char* what)
{
#ifdef DEBUG
printf("Debug: %s",what);
#endif
}
2. Ein Makro, was leer wird, wenn ein Flag definiert ist:
[CODE
#ifdef DEBUG
#define printdbg(a) printf("Debug: %s",what);
#else
#define printdbg(a)
#endif
[/CODE]
Beides hat Vor- und Nachteile. Das erste wäre halt eine gescheite Funktion, hätte aber den Nachteil, das ich,
wenn ich als release kompiliere, jede Menge leere Methodenaufrufe habe, oder optimiert die der Compiler weg?
Das zweite wäre halt komplett weg, aber man sagt ja, Makros sind ein bißchen unsauber, außerdem kann ich das
dann in meiner Dokumentation nicht als richtige Funktion angeben, es findet ja keine Überprüfung auf richtige
Argumenttypen statt. Außerdem können gängige Dokumentationstools glaub ich nicht so viel damit anfangen.
Gibt es evtl. noch eine dritte gescheite Lösung, oder mache ich mir hier Gedanken über nichtrelevante, evtl.
eingesparte Nanosekunden?
die Informationen über die Kommandozeile ausgibt, allerdings nur, wenn ein Compilerschalter definiert ist.
Nun bieten sich mir zwei Möglichkeiten an:
1. Eine Version, die den Körper einer Methode nur ausführt, wenn ein flag definiert ist, so etwa:
void printdbg(const char* what)
{
#ifdef DEBUG
printf("Debug: %s",what);
#endif
}
2. Ein Makro, was leer wird, wenn ein Flag definiert ist:
[CODE
#ifdef DEBUG
#define printdbg(a) printf("Debug: %s",what);
#else
#define printdbg(a)
#endif
[/CODE]
Beides hat Vor- und Nachteile. Das erste wäre halt eine gescheite Funktion, hätte aber den Nachteil, das ich,
wenn ich als release kompiliere, jede Menge leere Methodenaufrufe habe, oder optimiert die der Compiler weg?
Das zweite wäre halt komplett weg, aber man sagt ja, Makros sind ein bißchen unsauber, außerdem kann ich das
dann in meiner Dokumentation nicht als richtige Funktion angeben, es findet ja keine Überprüfung auf richtige
Argumenttypen statt. Außerdem können gängige Dokumentationstools glaub ich nicht so viel damit anfangen.
Gibt es evtl. noch eine dritte gescheite Lösung, oder mache ich mir hier Gedanken über nichtrelevante, evtl.
eingesparte Nanosekunden?