Riassumendo commenti e frammenti, quindi sono in un unico posto.
programma A C ha sempre un codice uscita, che il programma può decidere autonomamente se termina normalmente, restituendo un valore dalla funzione main
o chiamando la funzione exit
. Se il programma termina in modo anomalo, ad esempio per un errore di segmentazione, il sistema operativo decide il codice di uscita.
In Unix (Posix), il codice di uscita è un valore a 8 bit: 0-255. È combinato con un altro metadati per un stato: l'altra metadati comprendono informazioni sul fatto che il programma è terminato normalmente oppure no, se è stata interrotta a causa di un segnale, e in caso affermativo, il quale segnale. Per i dettagli, vedere la pagina di manuale wait(2).
In Unix, in corrispondenza dello scafo, lo stato del comando precedente è accessibile come variabile speciale $?
. Poiché il codice di uscita è solo 8 bit, ed è trattato come un intero senza segno, se si restituisce un valore negativo, esso viene trasformato in positivo: -1 diventa 255. Analogamente, se si restituisce un valore maggiore di un'unica almeno 255 significativi 8 bit sono utilizzati: 256 diventa 0.
Il tipo di ritorno di main
è int
, anziché short
o char
, perché non c'è beneficio particolare nel rendere un tipo più piccolo, in particolare a questo punto della storia, decenni dopo è stato deciso. Cambiarlo ora causerebbe solo inutili complicazioni.
Se si desidera eseguire un programma da C, la libreria standard fornisce la funzione system
, che restituisce facilmente lo stato del programma. (Si noti che system
esegue i comandi tramite la shell e si deve fare molta attenzione a eseguire correttamente l'escape se si fornisce al comando nomi di file o altre cose sulla riga di comando.)
Per maggiore flessibilità, è possibile eseguire altri programmi che utilizzano il sistema chiama fork
, execl
(o una delle sue varianti, vedere la pagina di manuale exec(3)) e wait
(già menzionato sopra). Questo è potente e flessibile, ma è anche facile fare errori, quindi assicuratevi di leggere la documentazione e verificare alcuni programmi di esempio prima. (D'altra parte, è molto divertente imparare questa roba.)
non c'è alcuna reale vantaggio di scegliere 'short' su' int' a meno che tu non ne abbia un sacco li nello stesso posto (array o struct).Non è più veloce avere un "short" e sugli ABI moderni spesso non si risparmia nemmeno spazio scegliendolo. In alcuni posti, 'short' è più lento perché devi eseguire l'estensione del segno quando lo carichi. –
sorpreso da un downvote .. !!! –
@Jeegar Patel .... devi capire che alcune persone sono sempre odiate –