funktion mit Hilfe von #ifdef variieren?

Gast #5926162
Hallo zusammen,

ich hab mal ne Frage:

Ich würde gerne Debug-Code ausgeben, aber nur wenn ein DEBUG-Modus 
definiert ist. Ich habe an zahlreichen Stellen im Code solche 
Debug-Ausgaben, und möchte dort nicht jedes mal eine if-Bedingung 
abfragen. Deswegen wäre jetzt mein Ansatz: Ich schreibe eine kleine 
Funktion, der ich dann die Werte zum Ausgeben übergebe. Im Falle, dass 
DEBUG ausgeschalten ist, gibt es dann eine Variante der Funktion, die 
eben nichts ausspuckt. Ist das so ein empfehlenswerter Zugang?

Beispielcode:

#define DEBUG

#ifdef DEBUG
void DebugAusgabe(int Wert){
Serial.print(Wert);
}
#else
void DebugAusgabe(int Wert){
}
#endif
Gast
Bernd K. schrieb:
> Das Beispiel kann man ohne #else hinschreiben. Aber ja, das kann man
> machen.

Da hast du schon Recht, aber wenn ich im Programmcode dann an mehreren 
Stellen die Funktion DebugAusgabe() aufrufe, wird der Compiler meckern, 
dass die Funktion nicht definiert ist, oder?
Gast
Paul schrieb:
> Ich würde gerne Debug-Code ausgeben, aber nur wenn ein DEBUG-Modus
> definiert ist.


VOID debugPrintf(CHAR *pString)
{
  Serial.println(pString);
}


#ifdef(DEBUG)
  #define DBGPRINT(a)  debugPrintf a
#else
  #define DBGPRINT(a)
#endif


DBGPRINT(("Hallo"));
Persönliche Seite
Markus F. schrieb:
> #define dbg(format, arg...) do { printf("DEBUG (%s()): ",
> format, __FUNCTION__, ##arg);} while(0)

Wobei das eine GNU-Erweiterung ist:

In den variadischen Makros ab C99 bezieht sich __VA_ARGS__ auf die 
variablen Argumente, die dann mit ... angegeben werden müssen.

Im Kontext von oben macht das aber Probleme wenn keine extra Argumente 
übergeben werden wie in
1
 dbg ("Hallo");
was zu einem Syntax-Fehler führt weil es expandiert zu
1
printf("DEBUG (%s()): " format, __FUNCTION__,);
Hierzu dient die GNU-Erweiterung, welche bei leerem arg... das Komma vor 
##arg "auffrisst", so dass es nicht mehr zu einem Fehler kommt.

Ich kenn jetzt kein anderes Konstrukt, das vorhandenen Code (hier ein ,) 
entfernt...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 7 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.