Debug-Funktionen wegdefinieren

OP #1069780
Hallo,
ich habe Funktionen, die nur dem Debug dienen.
Die sollen jetzt weg-definiert werden. Und zwar will ich nicht jeden 
Functioncall in ein ifdef packen, sondern ihn z.B. durch ein NOP 
ersetzen, das der Optimierer rausschmeißt.
Ich weiß, dass es geht, nur nicht mehr wie :(
Etwa so:
1
uart.h:
2

3
#ifndef DEBUG
4
    #define void uart_send(char c) NOP
5
#else
6
    void uart_send(char c);
7
#endif

Wie muss die genaue Syntax ausschauen...?

MfG
Mr.Green
Deinen merkwürdigen Mix aus C und Präprozessor verstehe ich nicht recht. 
Bei mir sehen Debug-Ausgaben beispielsweise so aus:

#if DEBUG
  #define trace(s, ...) rprintf(s, ## _VA_ARGS_)
#else
  #define trace(s, ...)
#endif

oder bei AVR für Text im ROM:

#if DEBUG
  #define trace(s, ...) { static char __s[] PROGMEM = (s); \
                          printf_P(__s, ## _VA_ARGS_); }
#else
  #define trace(s, ...)
#endif

und dann eben
  trace("wasauchimmer=%d\n", n);

Ich habe allerdings grad nicht parat, ob varargs #define in C99 drin 
sind sind, oder nur GNU-C, jedenfalls ist das nicht C89.
Persönliche Seite
A. K. wrote:

> oder bei AVR für Text im ROM

Oder
1
 
2
#if DEBUG
3
#    define trace(s,...)   printf_P (PSTR(s) , ##z)
4
#else
5
#    define trace(...)     (void) 0
6
#endif

Um Warnungen etc zu vermeiden bei
1
    if (x)
2
        trace (a, b);
3
    else
4
        ...

Die Leerzeichen um das , sind wichtig, damit es auch für
1
    trace ("Hallo");

funktioniert.

Bei einem Block im Makro sollte man besser
1
#define X(Y) \
2
   do { c-code } while(0)

schreiben anstatt
1
#define X(Y) \
2
   { c-code }

weil man in der Quelle gewohnt ist, X; zu schreiben and nicht X
1
    if (x)
2
        X(0);
3
    else
4
        x = 1;

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 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.