Gut könnte es .
Beispielsweise wird der im Betriebssystem Plan 9 verwendete Dialekt von C main
normalerweise als void
Funktion deklariert , der Beendigungsstatus wird jedoch an die aufrufende Umgebung zurückgegeben, indem ein Zeichenfolgenzeiger an die exits()
Funktion übergeben wird. Die leere Zeichenfolge kennzeichnet Erfolg, und jede nicht leere Zeichenfolge kennzeichnet einen Fehler. Dies hätte umgesetzt werden können, indem main
ein char*
Ergebnis zurückgegeben wurde.
Und es wäre sicherlich möglich, ein System mit einem float
oder einem double
Exit-Status zu implementieren .
Warum also int
? Es ist nur eine Frage der Konvention - und es hat einen enormen Wert, Betriebssysteme und Programme, die unter dieser Konvention ausgeführt werden, einer gemeinsamen Konvention zu unterwerfen.
Die Unix-Konvention sieht die Verwendung eines ganzzahligen Statuscodes vor, wobei 0 für Erfolg und Nicht-Null für Misserfolg steht (da es normalerweise nur eine Möglichkeit zum Erfolg gibt, aber mehrere Möglichkeiten zum Fehlschlagen). Ich weiß nicht, ob diese Konvention von Unix stammt. Ich vermute, dass es von früheren Betriebssystemen kam.
Gleitkomma wäre eine schwierigere Konvention, da (a) Gleitkomma-Unterstützung nicht universell ist, (b) es schwieriger ist, eine Zuordnung zwischen Gleitkomma-Werten und Fehlerbedingungen zu definieren, (c) verschiedene Systeme unterschiedliche Gleitkomma- Punktdarstellungen, und (d) stellen Sie sich nur den Spaß vor, einen Rundungsfehler im Exit-Status Ihres Programms aufzuspüren. Ganzzahlen hingegen eignen sich sehr gut für die Aufzählung von Fehlercodes.
Wie ich bereits erwähnt habe, werden in Plan 9 Zeichenfolgen verwendet, was jedoch eine gewisse Komplexität für die Speicherverwaltung, die Zeichencodierung usw. mit sich bringt. Soweit ich weiß, war dies eine neue Idee, als Plan 9 sie implementierte und die vorhandene Idee nicht ersetzte weit verbreitete Konvention.
(Übrigens, in C ++ main
kann nur zurückkehren int
, und in C void main
ist nur zulässig , wenn der Compiler speziell unterstützt. Viele Compiler beschweren sich nicht sehr laut , wenn Sie schreiben void main
, aber es ist nur eine leichte Übertreibung zu sagen , dass es falsch .)