Fun fact: Visual Studio gibt die #include-Abhängigkeiten des Kompilates via stdout aus. Schon allein deshalb landen Warnungen/Fehlermeldungen zum Code in stderr. Interne Fehler des Compilers bekommen wie alle anderen Warnungen/Fehler eine Nummer und das übliche Format zugewiesen.Lord Delvin hat geschrieben: ↑16.07.2022, 11:01Tatsächlich sehe ich auch das mit dem stderr anders, weil eine Fehlermeldung in einem Compiler kein Fehler, sondern eine erwartete Ausgabe ist. Ein Fehler wären Informationen zu einem Absturz oder eine Selbstprüfung zu Annahmen über die Standardbibliothek oder sowas.
————
Das Problem ist – denke ich – dass wir überhaupt darüber philosophieren, wie man es machen sollte. Ich hatte das gleiche in meiner Firma, die seit einigen Jahrzehnten ein Dutzend Linux-Daemons pflegt und vor einer ähnlichen Entscheidung stand.
Stellt sich raus: Es gibt etablierte Konventionen mit Schritt-für-Schritt-Checklisten, wie sich ein Daemon zu verhalten hat, und wenn man die befolgt, hat man niemals Probleme mit systemd & Co. Weil das aber offensichtlich niemand aus meiner Firma wusste, hat auch niemand danach gesucht, und das Rad neu erfunden bis es halbwegs rollte. Und alles weitere 20 Jahre lang mit irrwitzen Workarounds in Shell-Skripten „korrigiert“, inklusive dem obligatorischen sleep für $GEWÜRFELT Sekunden. Wir hätten literally hundert Bug-Tickets weniger, wenn der Programmierer vor 20 Jahren auf man daemon (7) gestoßen wäre. Die darf ich jetzt alle schließen.
Ich habe mich ein wenig umgeschaut, ob es Konventionen zu Programmausgaben gibt, aber ich konnte nur GNU-Konventionen zur Formatierung von Fehlermeldungen durch Compiler finden. Wie viel sonstige Ausgaben anfallen sollen, und wann sie nach stdout oder stderr gehen, wird da leider nicht erläutert. Selbst wenn, wäre GNU halt nur GNU und nicht die ganze Welt.
Fun fact: Wenn man ein Programm mit ungültigen Parametern aufruft, soll es sich mit Fehlercode beenden und zuvor seinen Titel und die Befehlshilfe drucken – nach stderr. Ruft man das Programm allerdings mit -help auf, soll die selbe Ausgabe nach stdout.
Dieses Wissen scheint in jahrzehnte alten Newsgroup-Mail-Archiven verstreut zu sein, und das ist das fucking Problem. Weil halt niemand, der mal schnell einen Compiler hinhackt, Zeit und Bock hat, sich drei Wochen mit Recherche zu solchen Philosophiefragen zu beschäftigen.