Bibliothek für Kontrollausgabe



  • Shade Of Mine schrieb:

    Nexus schrieb:

    Und statt 0 würde ich eher ; oder {} schreiben 😉

    ((void)0)
    oder eine inline funktion [...] verwenden die nichts macht...

    Das versteh ich jetzt nicht... Wieso eine Null oder eine Inline-Funktion, aber keine Leeranweisung bzw. ein leerer Block?

    @ ingobulla:
    Du könntest eigene Makros definieren und dann in den erwünschten Codeteilen spezifisch abfragen, ob nun eine Debug-Ausgabe stattfinden soll oder nicht. Für hierarchische Abfragen schachtelst du eben mehrere #ifdef s.



  • Nexus schrieb:

    Das versteh ich jetzt nicht... Wieso eine Null oder eine Inline-Funktion, aber keine Leeranweisung bzw. ein leerer Block?

    Was wenn jemand ein if verwendet:

    if(foo) DEBUG_OUT("blabla");

    was passiert, wenn du jetzt aus DEBUG_OUT ein {} machst?
    nichts wildes, aber stell dir mal folgendes vor:

    if(foo) DEBUG_OUT("bla bla");
    else DEBUG_OUT("blu blu");

    plötzlich haben wir einen syntax fehler, weil
    if(foo) {} ; else {} ;
    nicht korrekt ist...

    weiters sollten solche makros auch immer nur void liefern, damit nie nie nie jemand auf so eine idee kommt:

    int i = DEBUG_OUT("blup");

    deshalb immer nach void casten...



  • Fuer sowas nimmt man Logging-Bibliotheken, die die Logger hierarchisch ordnen koennen:

    http://logging.apache.org/log4cxx/index.html
    http://log4cpp.sourceforge.net/
    http://log4cplus.sourceforge.net/
    http://pantheios.sourceforge.net/ (keine Hierarchie)

    (mit "logging C++" waren die uebrigens alle auf der 1. Trefferseite bei Google... )

    An Filenamen & Zeilennummer rankommen ist auch relativ einfach, dafuer gibts vom Compiler definierte Macros, vllt. auch fuer den Funktionsnamen (die Macros muesstet aber selbst im Handbuch nachschlagen, hab k.A. mehr). 🙂



  • Blue-Tiger schrieb:

    An Filenamen & Zeilennummer rankommen ist auch relativ einfach, dafuer gibts vom Compiler definierte Macros, vllt. auch fuer den Funktionsnamen (die Macros muesstet aber selbst im Handbuch nachschlagen, hab k.A. mehr). 🙂

    __LINE__
    __FILE__
    BOOST_CURRENT_FUNCTION

    😉



  • @ Shade Of Mine:
    Vielen Dank für die Erläuterung, diese Problematik war mir bis jetzt nicht bewusst.



  • Wer braucht so komplizierte Dinge. Man muss sein Programm-Design nur übersichtlich halten. Dann helfen jeder Debugger oder eigene Kontrollausgaben.



  • berniebutt schrieb:

    Wer braucht so komplizierte Dinge. Man muss sein Programm-Design nur übersichtlich halten. Dann helfen jeder Debugger oder eigene Kontrollausgaben.

    Was ja auch wunderschön fuinktioniert wenn man der einzige ist der daran arbeitet und die Größe unter der Tausend Klassen-Grenze bleibt. 😉



  • @ Fellhuhn
    Gerade wenn mehrere Leute an einem Projekt arbeiten, kommt es auf ein sauberes Design und eben auf einen Kontroll-Mechanismus an. Irgendwo ist Mist und niemand merkt es. Die Fehlersuche war schon immer der grösste Aufwand der Programmierung.



  • Wenn alles Knorke wäre im Code würde man aber auch nicht so schön saftige Supportverträge abschließen und sich daran dumm und dämlich verdienen. 😃

    Ne, leider wird es selten was mit komplett durchgezogenen Designmustern etc. weil einigen einfach die Erfahrung fehlt, niemand die Zeit (und so das Geld) hat diese einzulernen. Ebenso müssen Änderungen schnell erfolgen und jahrzehnte alter Code integriert werden und das ganze noch mit alten Compilern laufen. Nicht immer funzt das. 😉



  • @ Fragesteller
    Du siehst, das Ziel ist nicht einfach.
    @ Fellhuhn
    Programmieren war noch nie einfach. Wer keine Ahnung oder nur ungenügende Erfahrung damit hat, sollte es sein lassen - oder einen anderen Job suchen.


Anmelden zum Antworten