Debbug-Mode lokal und global einschalten



  • Hallo,

    ich habe eine einfache Funktion:

    void displayPrintf(const char* File, const char *Func, int Line, char  *Text, int DebMode)
    {
     if (DebMode == 0) goto func_end;
     if (Line < 0 || File == NULL || Func == NULL || Text == NULL) goto func_end;
    
     printf ("%s(%s):%d - %s\n", File, Func, Line, Text);
    
     func_end:
    }
    

    Diese Funktion möchte ich in einer billibigen Funktion benutzen und zwar um zu sehen, ob ich jetzt in die Funktion rein oder aus der Funktion raus gehe. Z.B.:

    #include <stdio.h>
    
    const int debmode = 1;
    
    int main ()
    {
     displayPrintf(__FILE__, __FUNCTION__, __LINE__, "In", debmode);
    
     // Irgendwas...
    
     displayPrintf(__FILE__, __FUNCTION__, __LINE__, "Out", debmode);
    
     return 0;
    }
    

    In der Datei, in der ich z.B. main()-Funktion habe wurde die "debmode"-Variable auf 1 gesetzt. In einem anderen Modul oder in einer anderen Datei setze ich die gleiche Variable auf 0.

    Dadurch, dass ich es in verschiedenen Modulen benutzen will sagt mir der Compiler, dass meine "debmode"-Variable redeffiniert wird. Wie kann ich es umgehen oder welche andere Möglichkeit gibt es?

    Ich will so zu sagen meine displayMode(...)-Funktion entweder global "einschalten" oder nur in einzelnen Dateien/Modulen.

    Danke für die Tipps!



  • du kannst das auch mit #ifdef und #define machen



  • blups0r schrieb:

    du kannst das auch mit #ifdef und #define machen

    Ich hätte gerne ein Beispiel, wenn es möglich ist. Problem ist, wenn ich:

    #ifdef debmode 0
    #define debmode 1
    
    int main ()
    {
    
    // etc...
    
    }
    
    #endif
    

    global auf o gesetzt habe, dann setzt er mir meine Makrovariable immer auf 1...



  • #ifndef debmode
    #define debmode
    
    ...
    
    #ifdef debmode
      printf("blah");
    #endif
    
    ...
    
    #endif
    


  • shuriko schrieb:

    void displayPrintf(const char* File, const char *Func, int Line, char  *Text, int DebMode)
    {
     if (DebMode == 0) goto func_end;
     ...
     func_end:
    }
    

    ich hab' wirklich nichts gegen goto, aber hier ist es unangebracht. mach doch so:

    if (DebMode == 0)
       return;
    

    🙂



  • ~fricky schrieb:

    if (DebMode == 0)
       return;
    

    🙂

    Bei void geht es auch? 😕



  • ja du kannst auch aus einer void funktion returnen ist gar kein problem



  • shuriko schrieb:

    ~fricky schrieb:

    if (DebMode == 0)
       return;
    

    🙂

    Bei void geht es auch? 😕

    Klar, du gibtst halt nur keinen Rückgabewert an. Wäre ja auch seltsam, wenn man bei Funktionen mit Rückgabe eine Möglichkeit hätte, die Funktion vorzeitig zu verlassen, und bei void-Funktionen nicht...


Anmelden zum Antworten