#ifdef, #undef - Warnungen



  • Hallo,
    hätte nur eine kurze frage...

    mein compiler warnt mich bei folgendem Code immer mit den Fehlermeldungen
    "[Warning] Extra tokens at end of #ifdef directive" oder
    "[Warning] Extra tokens at end of #undef directive".

    und zwar in den markierten zeilen:

    #if DEBUGLEVEL>0 //Debugging-Infos
    #define SHOW_INVARIANTS
    #define ASSERT(x)\
      if (!(x))\ //<-- hier
      {\         //<-- hier
        cout << "FEHLER!! Annahme " << #x << "nicht zutreffend!\n";\
        cout << "In Zeile " << __LINE__ << "\n";\
        cout << "In Datei " << __FILE__ << "\n";\
      }          //<-- und hier
    #else
    #define ASSERT(x)
    #endif
    
    #if DEBUGLEVEL>1
    #define SHOW_[]INVARIANTS
    #endif
    

    Dabei ist es scheinbar egal, wie ich die definition aufhebe.
    Habs schon genau umgekehrt versucht, also mit

    #if DEBUGLEVEL>0 //Debugging-Infos
    #undef SHOW_INVARIANTS
    #undef ASSERT(x)\
      if (!(x))\ //<-- hier
      {\         //<-- hier
        cout << "FEHLER!! Annahme " << #x << "nicht zutreffend!\n";\
        cout << "In Zeile " << __LINE__ << "\n";\
        cout << "In Datei " << __FILE__ << "\n";\
      }          //<-- und hier
    #else
    #undef ASSERT(x)
    #endif
    
    #if DEBUGLEVEL>1
    #undef SHOW_[]INVARIANTS
    #endif
    

    und einfach mit

    #undef SHOW_INVARIANTS
    #undef SHOW_[]INVARIANTS
    #undef ASSERT(x)
    

    Beides scheint zu funktionieren, aber die Warnungen bleiben... Wovor will mein DevC++ - Compiler mich da warnen?.. 😕



  • Bei einem #undef brauchst du nur den Namen des zu undefinierenden Makros anzugeben, alle weiteren Angaben sind sinnlos (evt. sogar verboten).
    (#undef hebt die Makro-Definition auf) Bei deinem #define sollten deratige Meldungen eigentlich nicht erscheinen.

    (btw, kommt der Bezeichner SHOW_[]INVARIANTS wirklich durch den Präprozessor?)



  • Habe das SHOW_[]INVARIANTS , obwohl es bei mir eigentlich geklappt hat, mal durch SHOW_XINVARIANTS ersetzt..
    Das war eine meldung weniger!

    Ausserdem hab ich den Parameter bei ASSERT weggelassen:

    #undef SHOW_INVARIANTS
    #undef SHOW_XINVARIANTS
    #undef ASSERT
    

    Astrein, jetzt sind sie weg 😉
    Dankeschööön 😃


Anmelden zum Antworten