+Fuss+ hat geschrieben:Hallo,
Ich programmiere ja zur Zeit an einem "Anwender-Programm" (hat also relativ wenig mit Konsole/Terminal zutun).
Jetzt habe ich in dem Code allerdings einige printf's drin, es wird jede Sekunde der aktuelle Timerstand ausgegeben etc.
Mal so allgemein:
Lässt man solche Sachen in dem Code und wenn wer das Programm aus dem Terminal startet, sieht er halt alles was der Programmierer auch sieht, oder nimmt man die Printf's raus, so dass es keinen Unterschied macht, ob das Programm per Doppelklick gestartet wird oder aus dem Terminal?
Im einfachsten Fall definiert man eine Debug-Funktion, die die Ausgaben verwaltet. In der Release-Version klammerst Du mit einem #ifndef DEBUG den Inhalt aus. So bestimmst Du per Compiler-Switch ob es Ausgaben gibt.
+Fuss+ hat geschrieben:Ist ja eigentlich nicht wichtig, aber das würde mich mal interessieren, wie das bei einem professionellen Programm gemacht wird.
Bei einem Anwenderprogramm sperrt man die Ausgaben meist im Release, so dass sie nicht mehr ausgegeben werden.
printf verwendet man fast nie, aber fprintf zum Beispiel: printf( ... ist eine Abkürzung für fprintf( stdout, ...
Mit fprintf schreibt man dann nach stderr, das erscheint bei Windows aber genauso in der Konsole.
Nun kann man aber stderr (=Console) schließen und für stderr eine Datei öffnen und so schreibt man in eine Debug-Datei. Ist die Datei /dev/null, so werden die Ausgaben verworfen und nirgendwo geschrieben.
Ich verwende in meinen Programmen eine Log-Klasse, welche in meinem Compiler die Fehlermeldungen in der Konsole optisch aufbereitet präsentiert, sie optional in eine Datei schreibt, aber bei GUI Programmen auch über GTK ein Fenster öffnen kann und eine Fehlerliste mitführen kann, die man per Buttons wieder löschen, speichern oder kopieren, bzw. die Fehler nach Priorität filtern kann.
Das absolut teuerste Programm, an dem ich je mitgewirkt habe, hatte ebenfalls eine eigene Log-Klasse. Diese müllte einfach alles in die Konsole, weil sie absolut alles mitloggte: User hat anfrage gestellt, 5000 Schritte mit Teilergebnissen der Zwischenschritte bis das Ergebnis berechnet ist und am Schluss das Ergebnis. Die Release-Version war eine mit wenigen Tests getestete Trunk-Version. Eine Unterscheidung zwischen Debug und Release ist mir ansonsten nie aufgefallen.
Das Programm läuft allerdings auf Servern, d.h. der Server wird vollgemüllt, aber der Rechner des Kunden sieht das so ja nicht.
Das zweitteuerste Programm (etwa 1/100 des Preises zuvor, wobei ich immernoch vermute, dass wenn wir im Forum alle unser monatliches Einkommen zusammenwerfen, wird's noch nicht für 'ne Lizenz reichen), an dem ich je mitgearbeitet habe, läuft auf dem Benutzerrechner. Es macht einfach überhaupt keine Log-Ausgaben... bestenfalls ein 'Das Programm musste beendet werden.'
Was also "professionell" ist, liegt im Auge des Betrachters.
Es ist meist eher die Frage, ob sich der Kunde dran stört, bzw. was die Entwickler brauchen, um das Programm erfolgreich zu entwickeln. Passt beides nicht zusammen, baut man halt einen Switch ein.