Bene, potrebbe .
Ad esempio, nel dialetto di C usato nel Piano 9 il sistema operativo main
è normalmente dichiarato come una funzione void
, ma lo stato di uscita viene restituito all'ambiente chiamante passando un puntatore a stringa alla funzione exits()
. La stringa vuota denota il successo, e qualsiasi stringa non vuota denota qualche tipo di errore. Questo potrebbe essere stato implementato avendo main
restituito un risultato char*
.
E sarebbe certamente possibile implementare un sistema con uno stato di uscita float
o double
.
Quindi perché int
? È solo una questione di convenzioni - e c'è un tremendo valore nell'avere sistemi operativi e programmi che funzionano sotto di loro obbediscono a una convenzione comune.
La convenzione Unix consiste nell'utilizzare un codice di stato intero, con 0 che denota il successo e il non-zero che denota il fallimento (perché in genere c'è solo un modo per avere successo, ma più modi per fallire). Non so se quella convenzione sia nata con Unix; Sospetto che provenga da precedenti sistemi operativi.
Il virgola mobile sarebbe una convenzione più difficile, perché (a) il supporto a virgola mobile non è universale, (b) è più difficile definire una mappatura tra valori a virgola mobile e condizioni di errore, (c) utilizzo di sistemi diversi diverse rappresentazioni a virgola mobile e (d) immagina solo il divertimento di rintracciare un errore di arrotondamento nello stato di uscita del tuo programma. Gli interi, d'altra parte, si prestano molto bene a enumerare i codici di errore.
Il piano 9, come ho detto, usa le stringhe, ma questo impone una certa complessità per la gestione della memoria, la codifica dei caratteri, ecc. Era, per quanto ne so, una nuova idea quando Plan 9 lo implementava, e non sostituire la convenzione diffusa esistente.
(Incidentalmente, in C ++ main
può solo restituire int
, e in C void main
è permesso solo se il compilatore lo supporta in modo specifico.Molti compilatori non si lamentano molto strong se scrivi void main
, ma è solo una leggera esagerazione affermare che è sbagliato .)