Beh, potrebbe .
Ad esempio, nel dialetto di C utilizzato nel sistema operativo Plan 9main
viene normalmente dichiarato una void
funzione, ma lo stato di uscita viene restituito all'ambiente chiamante passando un puntatore di stringa alla exits()
funzione. La stringa vuota indica il successo e qualsiasi stringa non vuota indica un tipo di errore. Questo avrebbe potuto essere implementato avendo main
restituito achar*
risultato.
E sarebbe certamente possibile implementare un sistema con un float
odouble
uscita.
Allora perchè int
? È solo una questione di convenzioni - e c'è una cosa tremenda valore nel fatto che i sistemi operativi e i programmi eseguiti sotto di loro obbediscano a una convenzione comune.
La convenzione Unix prevede l'uso di un codice di stato intero, con 0 che indica il successo e diverso da zero che indica il fallimento (perché in genere esiste un solo modo per avere successo, ma più modi per fallire). Non so se quella convenzione sia nata con Unix; Sospetto che provenisse da precedenti sistemi operativi.
Il virgola mobile sarebbe una convenzione più difficile, perché (a) il supporto in virgola mobile non è universale, (b) è più difficile definire una mappatura tra valori in virgola mobile e condizioni di errore, (c) sistemi diversi usano differenti virgola mobile- rappresentazioni punto e (d) immagina solo il divertimento di rintracciare un errore di arrotondamento nello stato di uscita del tuo programma. I numeri interi, d'altra parte, si prestano molto bene all'enumerazione dei codici di errore.
Plan 9, come ho già detto, usa stringhe, ma ciò impone una certa complessità per la gestione della memoria, la codifica dei caratteri, ecc. Fu, per quanto ne so, una nuova idea quando Plan 9 lo implementò e non sostituì quello esistente convenzione diffusa.
(Per inciso, in C ++ main
può solo tornare int
, e in C void main
è consentito solo se il compilatore lo supporta specificamente. Molti compilatori non si lamentano molto ad alta voce se scrivi void main
, ma è solo una leggera esagerazione dire che è sbagliato .)