debug messages in ein macro auslagern



  • Ja für den Teil, in dem _DIAGNOSIS_ definiert ist. Beim anderen besteht genau das umgekehrte Problem: Bei einem if würde der nächste Befehl plötzlich bedingt werden, obwohl das sicher nicht die Absicht war. Da würde ich also auch wieder ein leeres do {} while(0) hinsetzen.



  • taljeth schrieb:

    Ja für den Teil, in dem _DIAGNOSIS_ definiert ist. Beim anderen besteht genau das umgekehrte Problem: Bei einem if würde der nächste Befehl plötzlich bedingt werden, obwohl das sicher nicht die Absicht war. Da würde ich also auch wieder ein leeres do {} while(0) hinsetzen.

    es geht doch garnicht so genau darum wie das macro aussehen muß, solang es zentral mit einer veränderung angepasst werden kann ist doch alles ok

    btw. das macro sollte einen

    #ifdef _DIAGNOSIS_
      settextcolor(3,0);
      printf("dbg message");
      settextcolor(15,0);  
    #endif
    

    block ersetzen. da hätte ja sowas auch nicht geklappt oder 😕

    if(1)
    #ifdef _DIAGNOSIS_
      settextcolor(3,0);
      printf("dbg message");
      settextcolor(15,0);  
    #endif
    

    aber ja rein mit dem do{}while(0) bzw. {} stören wirds sicher nicht 😉

    lg lolo



  • Ach, wisst ihr was: Behaltet eure Bugs einfach, wenn ihr euch angegriffen fühlt, wenn man drauf aufmerksam macht.



  • taljeth schrieb:

    Ach, wisst ihr was: Behaltet eure Bugs einfach, wenn ihr euch angegriffen fühlt, wenn man drauf aufmerksam macht.

    Ich seh schon ihr habt Spaß 😃
    Ich nehme bei mir generell __FILE__ und __LINE__ ins Makro. "dbg message" ist nämlich ziemlich nichtssagend.
    Das do while hingegen verstehe ich nicht. Wieso nicht ein einfacher Block?

    #define kdebug(x) {\
        settextcolor(3,0); \
        printf("Debug in %s:%d: %s\n", __FILE__, __LINE__, x); \
        settextcolor(15,0); \
    }
    

    Dann kann man sagen kdebug("Versuche [irgendwas was wahrscheinlich schiefgeht]") und an der Ausgabe sieht man dann auch tatsächlich was.



  • nwp2 schrieb:

    Das do while hingegen verstehe ich nicht. Wieso nicht ein einfacher Block?

    #define kdebug(x) {\
        settextcolor(3,0); \
        printf("Debug in %s:%d: %s\n", __FILE__, __LINE__, x); \
        settextcolor(15,0); \
    }
    

    Wegen

    if(...)
      kdebug("bla");
    else
      printf("blubb");
    

  • Mod

    Kann mal jemand den kompletten Ausdruck hinschreiben, wie er jetzt zur Fehlerabsicherung aussehen muss? Zwei mal do/while?



  • Ich glaube, so ist das gemeint:

    #ifdef _DIAGNOSIS_
    	#define kdebug(...) do{\
    		settextcolor(3,0);\
    		printf(__VA_ARGS__);\
    		settextcolor(15,0);\
    	}while(0)
    #else
    	#define kdebug(...) do{}while(0)
    #endif
    

    oder mit nwp2

    #ifdef _DIAGNOSIS_
    	#define kdebug(...) do{\
    		settextcolor(3,0);\
    		printf("(von nwp2)Debug in %s:%d: ",__FILE__,__LINE__,);\
    		printf(__VA_ARGS__);\
    		settextcolor(15,0);\
    	}while(0)
    #else
    	#define kdebug(...) do{}while(0)
    #endif
    

    Und noch MrX beachten.

    //hab keine ahnung, wie man die farben wirklich liest. 
    #define _DIAGNOSIS_
    
    #ifdef _DIAGNOSIS_
    	#define kdebug(fcolor,bcolor,...) do{\
    		int ofcolor,obcolor;\
    		gettextcolors(&ofcolor,&obcolor);\
    		settextcolor(fcolor,bcolor);\
    		printf("(von nwp2)Debug in %s:%d: ",__FILE__,__LINE__);\
    		printf(__VA_ARGS__);\
    		settextcolor(ofcolor,obcolor);\
    	}while(0)
    #else
    	#define kdebug(fcolor,bcolor,...) do{}while(0)
    #endif
    


  • Dann könnten wir vlt. besser eine inline-Fkt. nehmen...



  • Mr X schrieb:

    Dann könnten wir vlt. besser eine inline-Fkt. nehmen...

    👍



  • Mr X schrieb:

    Dann könnten wir vlt. besser eine inline-Fkt. nehmen...

    Sogar outline. Aber das isses gar nicht mehr so kompliziert.

    #ifdef _DIAGNOSIS_ 
        #define kdebug(...) kdebugfunc(__VA_ARGS__)
    #else 
        #define kdebug(...) ((void(4711))
    #endif
    

Anmelden zum Antworten