terminare esecuzione

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
scevchenko
Prode Principiante
Messaggi: 82
Iscrizione: giovedì 5 aprile 2007, 21:36

terminare esecuzione

Messaggio da scevchenko »

per terminare l'esecuzione di un programma scritto in c++ e' giusto su linux scrivere return 0; ???
Avatar utente
scacchia
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2863
Iscrizione: martedì 15 maggio 2007, 22:39
Località: Un po' qui e un po' la

Re: terminare esecuzione

Messaggio da scacchia »

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.
Avatar utente
difesaparcosempione
Rampante Reduce
Rampante Reduce
Messaggi: 6031
Iscrizione: giovedì 27 luglio 2006, 19:06
Località: Torino
Contatti:

Re: terminare esecuzione

Messaggio 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 $?


8)

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++ ).
:)
Avatar utente
thelo
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 269
Iscrizione: lunedì 8 gennaio 2007, 17:16

Re: terminare esecuzione

Messaggio da thelo »

si, anche per il c++
Navigammo su fragili vascelli
per affrontar del mondo la burrasca
ed avevamo gli occhi troppo belli...
Avatar utente
jack84
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 493
Iscrizione: lunedì 12 febbraio 2007, 11:13

Re: terminare esecuzione

Messaggio 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.
Non sempre si può prevedere, ma ci si può sempre preparare
Avatar utente
menelicte
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 596
Iscrizione: lunedì 4 giugno 2007, 0:04

Re: terminare esecuzione

Messaggio da menelicte »

Codice: Seleziona tutto

return 0
vale solo nel main

più in generale puoi usare:

Codice: Seleziona tutto

exit (status)
dove status è un intero restituito al processo chiamante
e deve essere 0 in caso di terminazione regolare
"Tentare è il primo passo verso il fallimento" Homer J.
Avatar utente
thelo
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 269
Iscrizione: lunedì 8 gennaio 2007, 17:16

Re: terminare esecuzione

Messaggio 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?
Navigammo su fragili vascelli
per affrontar del mondo la burrasca
ed avevamo gli occhi troppo belli...
Avatar utente
menelicte
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 596
Iscrizione: lunedì 4 giugno 2007, 0:04

Re: terminare esecuzione

Messaggio 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  ;D
"Tentare è il primo passo verso il fallimento" Homer J.
Avatar utente
thelo
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 269
Iscrizione: lunedì 8 gennaio 2007, 17:16

Re: terminare esecuzione

Messaggio 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)
Navigammo su fragili vascelli
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

Messaggio 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........:(
Avatar utente
menelicte
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 596
Iscrizione: lunedì 4 giugno 2007, 0:04

Re: terminare esecuzione

Messaggio da menelicte »

SuperAxel ha scritto: exit() è un system call
è veeeeeeeeeeeero!  :o

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.
Avatar utente
jack84
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 493
Iscrizione: lunedì 12 febbraio 2007, 11:13

Re: terminare esecuzione

Messaggio da jack84 »

http://it.wikipedia.org/wiki/Teorema_di_B%C3%B6hm-Jacopini
Bohm era un  professore della mia facoltà ;D
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
Avatar utente
menelicte
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 596
Iscrizione: lunedì 4 giugno 2007, 0:04

Re: terminare esecuzione

Messaggio 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)
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.
Avatar utente
jack84
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 493
Iscrizione: lunedì 12 febbraio 2007, 11:13

Re: terminare esecuzione

Messaggio 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 :) 
Non sempre si può prevedere, ma ci si può sempre preparare
Avatar utente
menelicte
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 596
Iscrizione: lunedì 4 giugno 2007, 0:04

Re: terminare esecuzione

Messaggio da menelicte »

eh sì... un buon goto si vede nel momento del bisogno  ;D

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.
Avatar utente
thelo
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 269
Iscrizione: lunedì 8 gennaio 2007, 17:16

Re: terminare esecuzione

Messaggio 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) ;D ;D ;D
Navigammo su fragili vascelli
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

Messaggio 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"
scevchenko
Prode Principiante
Messaggi: 82
Iscrizione: giovedì 5 aprile 2007, 21:36

Re: terminare esecuzione

Messaggio 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
scevchenko
Prode Principiante
Messaggi: 82
Iscrizione: giovedì 5 aprile 2007, 21:36

Re: terminare esecuzione

Messaggio da scevchenko »

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

Messaggio 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....:(
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 2 ospiti