terminare esecuzione
-
scevchenko
- Prode Principiante
- Messaggi: 82
- Iscrizione: giovedì 5 aprile 2007, 21:36
terminare esecuzione
per terminare l'esecuzione di un programma scritto in c++ e' giusto su linux scrivere return 0; ???
- scacchia
- Imperturbabile Insigne

- Messaggi: 2863
- Iscrizione: martedì 15 maggio 2007, 22:39
- Località: Un po' qui e un po' la
Re: terminare esecuzione
non ne ho idea ma visto che nessuno ti risponde... forse exit 0 ???
"Non importa quanto corri, ma dove corri e perchè" Z. Zeman
"In an open world, who needs Windows or Gates?"
"Io lo spero vivamente, ma ho i miei dubbi che possa vincere uno scudetto con la Roma, che è il sogno più grande della mia vita." D.D.R.
"In an open world, who needs Windows or Gates?"
"Io lo spero vivamente, ma ho i miei dubbi che possa vincere uno scudetto con la Roma, che è il sogno più grande della mia vita." D.D.R.
- difesaparcosempione
- Rampante Reduce

- Messaggi: 6031
- Iscrizione: giovedì 27 luglio 2006, 19:06
- Località: Torino
- Contatti:
Re: terminare esecuzione
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++ ).

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
si, anche per il c++
Navigammo su fragili vascelli
per affrontar del mondo la burrasca
ed avevamo gli occhi troppo belli...
per affrontar del mondo la burrasca
ed avevamo gli occhi troppo belli...
Re: terminare esecuzione
Sì se non ci sono stati problemi nell'esecuzione ritorni 0 per indicare che si è giunti alla fine senza intoppi.scevchenko ha scritto: per terminare l'esecuzione di un programma scritto in c++ e' giusto su linux scrivere return 0; ???
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.
Non sempre si può prevedere, ma ci si può sempre preparare
Re: terminare esecuzione
Codice: Seleziona tutto
return 0più in generale puoi usare:
Codice: Seleziona tutto
exit (status)e deve essere 0 in caso di terminazione regolare
"Tentare è il primo passo verso il fallimento" Homer J.
Re: terminare esecuzione
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?
sia in ambito accademico che professionale, tutti indicano la exit() come la maniera grezza per uscire...
ma che cambierà mai?
Navigammo su fragili vascelli
per affrontar del mondo la burrasca
ed avevamo gli occhi troppo belli...
per affrontar del mondo la burrasca
ed avevamo gli occhi troppo belli...
Re: terminare esecuzione
- exit () è grezzothelo ha scritto: sia in ambito accademico che professionale, tutti indicano la exit() come la maniera grezza per uscire...
- 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
"Tentare è il primo passo verso il fallimento" Homer J.
Re: terminare esecuzione
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)
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)
Navigammo su fragili vascelli
per affrontar del mondo la burrasca
ed avevamo gli occhi troppo belli...
per affrontar del mondo la burrasca
ed avevamo gli occhi troppo belli...
-
SuperAxel
- Prode Principiante
- Messaggi: 113
- Iscrizione: mercoledì 8 marzo 2006, 17:25
- Località: Minturno
Re: terminare esecuzione
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........
exit() è una funzione, mentre return è una porala chiave.
spero di essere stato chiaro....
non sono bravo nelle spiegazioni........
Re: terminare esecuzione
è veeeeeeeeeeeero!SuperAxel ha scritto: exit() è un system call
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
"Tentare è il primo passo verso il fallimento" Homer J.
Re: terminare esecuzione
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)
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)
Ultima modifica di jack84 il venerdì 15 giugno 2007, 23:24, modificato 1 volta in totale.
Non sempre si può prevedere, ma ci si può sempre preparare
Re: terminare esecuzione
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
...ma non vuol dire che sia sbagliato usarle.In effetti esso ha contribuito alla critica dell'uso sconsiderato delle istruzioni go to...
Siamo alla soglia dell' OT (good)
Ultima modifica di menelicte il venerdì 15 giugno 2007, 23:32, modificato 1 volta in totale.
"Tentare è il primo passo verso il fallimento" Homer J.
Re: terminare esecuzione
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
Non sempre si può prevedere, ma ci si può sempre preparare
Re: terminare esecuzione
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
ma gli exit() risparmiano tanti controlli nelle funzioni annidate, che complicherebbero non poco la stesura di un algoritmo
"Tentare è il primo passo verso il fallimento" Homer J.
Re: terminare esecuzione
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)

vale lo stesso per continue e break(fuori dagli switch, ovvio)
ma 1 return per ogni funzione me ne frego!(come disse qualcuno)
Navigammo su fragili vascelli
per affrontar del mondo la burrasca
ed avevamo gli occhi troppo belli...
per affrontar del mondo la burrasca
ed avevamo gli occhi troppo belli...
-
SuperAxel
- Prode Principiante
- Messaggi: 113
- Iscrizione: mercoledì 8 marzo 2006, 17:25
- Località: Minturno
Re: terminare esecuzione
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"
-
scevchenko
- Prode Principiante
- Messaggi: 82
- Iscrizione: giovedì 5 aprile 2007, 21:36
Re: terminare esecuzione
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
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
-
scevchenko
- Prode Principiante
- Messaggi: 82
- Iscrizione: giovedì 5 aprile 2007, 21:36
Re: terminare esecuzione
mi fa paicere cmq si sia creata una bella discussione non si fnisce mai di imparare mai
-
SuperAxel
- Prode Principiante
- Messaggi: 113
- Iscrizione: mercoledì 8 marzo 2006, 17:25
- Località: Minturno
Re: terminare esecuzione
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....
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....
Chi c’è in linea
Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti
