Pagina 1 di 2
terminare esecuzione
Inviato: venerdì 15 giugno 2007, 14:36
da scevchenko
per terminare l'esecuzione di un programma scritto in c++ e' giusto su linux scrivere return 0; ???
Re: terminare esecuzione
Inviato: venerdì 15 giugno 2007, 16:37
da scacchia
non ne ho idea ma visto che nessuno ti risponde... forse exit 0 ???
Re: terminare esecuzione
Inviato: venerdì 15 giugno 2007, 16:55
da difesaparcosempione
Si, nella funzione main al return 0, il programma termina.
Il valore che metti per uscire poi lo intercetti così da shell
./tuoProgramma
echo $?
Se il Main non è stato dichiarato int bensì void allora basterà un semlice return
Il compilatore di da in ogni caso un warning ..
Dovrebbe tornare sempre 0, ma a te non interessa in quanto sei uscito senza un codice di ritorno.
( questo per il C è di sicuro ... immagino anche per il c++ ).

Re: terminare esecuzione
Inviato: venerdì 15 giugno 2007, 17:54
da thelo
si, anche per il c++
Re: terminare esecuzione
Inviato: venerdì 15 giugno 2007, 18:29
da jack84
scevchenko ha scritto:
per terminare l'esecuzione di un programma scritto in c++ e' giusto su linux scrivere return 0; ???
Sì se non ci sono stati problemi nell'esecuzione ritorni 0 per indicare che si è giunti alla fine senza intoppi.
Se il tuo programma per un qualche motivo fallisce (ad esempio gli sono stati passati come argomenti parametri non validi e quindi non può operare, o fallisce l'esecuzione di una chiamata di sistema) allora è buona norma tornare un valore diverso da 0 che puoi stabilire te a seconda del tipo di errore riscontrato.
Re: terminare esecuzione
Inviato: venerdì 15 giugno 2007, 19:23
da menelicte
vale solo nel main
più in generale puoi usare:
dove status è un intero restituito al processo chiamante
e deve essere 0 in caso di terminazione regolare
Re: terminare esecuzione
Inviato: venerdì 15 giugno 2007, 21:34
da thelo
io sinceramente non ho mai capito la differenza...
sia in ambito accademico che professionale, tutti indicano la exit() come la maniera grezza per uscire...
ma che cambierà mai?
Re: terminare esecuzione
Inviato: venerdì 15 giugno 2007, 21:57
da menelicte
thelo ha scritto:
sia in ambito accademico che professionale, tutti indicano la exit() come la maniera grezza per uscire...
- exit () è grezzo
- goto è grezzo
- break è grezzo
ma alla fin fine ti permettono di fare le stesse cose utilizzando meno variabili di stato, e se vai a vedere l'assembler le istruzioni sono sempre quelle: dei salti.
se una funzione ti permette di terminare subito il processo, invece di occupare ulteriormente risorse per eseguire controlli aggiuntivi, credo che sia da considerarsi buona.
Comitato per la difesa delle funzioni ghettizzate

Re: terminare esecuzione
Inviato: venerdì 15 giugno 2007, 22:16
da thelo
anche continue, insieme a goto e break...ma perchè sono contro i principi della programmazione strutturata.
in teoria per ogni funzione ci dovrebbe essere un solo return, e alla fine della funzione, ma questo è veramente assurdo

ma dal punto di vista della leggibilità una return(0) nella main è uguale alla exit(0)
Re: terminare esecuzione
Inviato: venerdì 15 giugno 2007, 22:23
da SuperAxel
exit() è un system call, cioè una interfaccia che richiama una particolare funzione del kernel che ti permette di terminare il programma, mentre return ti fa uscire dalla funzione e restituisce un valore, comunque dopo return nel main viene sempre chiamata la funzione exit() per terminare il programma!!!
exit() è una funzione, mentre return è una porala chiave.
spero di essere stato chiaro....
non sono bravo nelle spiegazioni........

Re: terminare esecuzione
Inviato: venerdì 15 giugno 2007, 23:13
da menelicte
SuperAxel ha scritto:
exit() è un system call
è veeeeeeeeeeeero!
come ho fatto a dimenticarlo?
comunque penso che la programmazione strutturata sia solo un insieme di paletti per evitare errori (è anche più leggibile).
non si può tacciare di grezzaggine un codice per il solo fatto che contiene exit(), break, continue o goto
Re: terminare esecuzione
Inviato: venerdì 15 giugno 2007, 23:15
da jack84
http://it.wikipedia.org/wiki/Teorema_di_B%C3%B6hm-Jacopini
Bohm era un professore della mia facoltà

Per uscire c'e' anche la system call abort(), ma è sconsigliabile.
abort ed exit causano la terminazione immediata del processo (tramite il sistema operativo che provvede a dallocare lo spazio ecc..) return viceversa fa tornare alla funzione chiamante (main o no)
Re: terminare esecuzione
Inviato: venerdì 15 giugno 2007, 23:24
da menelicte
Questo teorema ha un interesse soprattutto teorico, in quanto, i linguaggi di programmazione tendono a dotarsi di più tipi di istruzioni di larga portata per evitare che i programmatori debbano occuparsi di istruzioni di portata molto minuta e quindi dispersive per quanto attiene alla padronanza delle finalità dell'algoritmo
In effetti esso ha contribuito alla critica dell'uso sconsiderato delle istruzioni go to...
...ma non vuol dire che sia sbagliato usarle.
Siamo alla soglia dell' OT (good)
Re: terminare esecuzione
Inviato: venerdì 15 giugno 2007, 23:34
da jack84
Sarà ma specialemente il goto direi proprio di usarlo in casi di emergenza,quando ad esempio sei talmente annidato in cicli che non sai come uscirne fuori. Le cose si fanno senza artifici di norma e se ne guadagna in salute quando si và a rileggere il programma
Re: terminare esecuzione
Inviato: venerdì 15 giugno 2007, 23:49
da menelicte
eh sì... un buon goto si vede nel momento del bisogno
ma gli exit() risparmiano tanti controlli nelle funzioni annidate, che complicherebbero non poco la stesura di un algoritmo
Re: terminare esecuzione
Inviato: sabato 16 giugno 2007, 0:25
da thelo
mah...io non ho mai avuto bisogno di una goto in vita mia,
vale lo stesso per continue e break(fuori dagli switch, ovvio)
ma 1 return per ogni funzione me ne frego!(come disse qualcuno)

Re: terminare esecuzione
Inviato: sabato 16 giugno 2007, 11:12
da SuperAxel
gli exit() sono importanti soprattutto quando in un programma costruisci tanti processi figli, ti permette di "ucciderli" quando hanno terminato la loro funzione e quindi deallocare tutte le risores che avevano, evitando così di riempire la memoria di tanti processi "zombie"
Re: terminare esecuzione
Inviato: sabato 16 giugno 2007, 13:29
da scevchenko
si vabbe ma se lasci fare tutto al compilatore lui ti gestisce da solo i record di attivazione credo con politica lifo quindi alloca e dealloca tutto al tempo giusto a meno che nn dimentichi di deallocare in area heap
poi il goto stilisticamente e' quanto di piu' brutto ci sia
sapete exit() a che classe appartiene???
ps cmq credo che tutte queste istruzioni per la terminazione alla fine generino lo stesso assembler con salti a sistema operativo quindi .... uno vale l'altro
la mia domanda era per capire se tra linux e windows faceva differenza il valore da ritornare al sistema operativo che e'0 colui che chiama il programma main.cpp per intenderci
Re: terminare esecuzione
Inviato: sabato 16 giugno 2007, 13:30
da scevchenko
mi fa paicere cmq si sia creata una bella discussione non si fnisce mai di imparare mai
Re: terminare esecuzione
Inviato: sabato 16 giugno 2007, 13:37
da SuperAxel
tra linux e windows non c'è differenza per quanto riguarda le istruzioni, il linguaggio non cambia.
forse non mi sono spiegato bene, ma exit() non è che fa fare tutto al compilatore, ma dice al sistema operativo che il programma(processo) che ha chiamato la funzione exit () ha terminato la sua esecuzione, e non ci sono motivi perchè il sistema operativo debba mantenerlo ancora in memoria; il compilatore non gestisce la memoria di sistema...compila solo il sorgente per trasformarlo in un file eseguibile riconoscibile per essere eseguito..
Non so dirti exit() a che classe appartiene nel c++, mi ricordo sulo quella del C....
