xshell32 (Normal User)
Rookie
Messaggi: 34
Iscritto: 08/02/2008
|
Buongiorno a tutti.
Come qualcuno avrà capito da altri miei post, stò cominciando ora a programmare in C e una delle cose che non riesco a capire è la funzione "Return".
Esaminando alcuni codici sorgenti, ho notato che è presente, quasi sempre alla fine, la funzione: Return 0;. In alcuni casi, al posto dello zero, è presente un altro numero o un'espressione (esempio: Return a+b;).
Cosa serve questa fuzione? L'unica cosa che ho capito è che il programma si aspetta un valore di ritorno (appunto return), ma non ne ho ancora capito la logica... è sempre necessaria questa funzione o la si deve mettere solo in alcuni casi? Quale valore devo inserire?
Grazie per le eventuali risposte.
Ultima modifica effettuata da xshell32 il 23/02/2008 alle 18:32 |
|
gantonio (Normal User)
Guru^2
Messaggi: 1532
Iscritto: 09/09/2007
|
Per iniziare
return
non è una funzione.
E' una keyword (parola chiave) del linguaggio che serve a "restituire un valore" alla funzione chiamante in modo che quest'ultima possa utilizzarlo ...
Se scrivi
return 0;
la funzione in cui si trova questa istruzione restituira' tale valore alla funzione che l'ha chiamata ... in ugual modo se scrivi return a+b; verra' restituito il valore della somma dei valori a e b ...
Quello che "significa" tale valore, lo determina solamente il programmatore ...
|
|
xshell32 (Normal User)
Rookie
Messaggi: 34
Iscritto: 08/02/2008
|
Grazie gantonio! Però ho ancora due piccolissimi dubbi.
1) Prendiamo, ad esempio Return a+b;. Da come ho capito, tale valore potrà essere utilizzato da altre funzioni. Come faccio nel programma ad applicare il valore di ritorno di una funzione ad una seconda funzione, che svolge la somma di alcuni numeri, tra cui quello fornito dal Return?
Per intenderci:
main()
{
...
return a+b;
int somma;
somma = ... (al posto dei puntini andrebbe il valore del return e di altri addendi)
}
È possibile fare ciò? Se sì, come si dovrebbe scrivere?
(L'esempio che ho scritto è un po' stupido ma serve per farmi capire... )
2) Il return 0 a me sembrerebbe inutile posto alla fine di un programma... perchè allora è così utilizzato? Sembrerebbe quasi che il return sia obbligatorio...
Ultima modifica effettuata da xshell32 il 23/02/2008 alle 21:08 |
|
gantonio (Normal User)
Guru^2
Messaggi: 1532
Iscritto: 09/09/2007
|
Scrivi una funzione che esegue la somma dei due parametri interi passati e la restituisce
Codice sorgente - presumibilmente C++ |
int somma(int a, int b) { return a+b; } int main() { int s, x, y; x=10; y=20; s=somma(x, y); printf("somma = %d\n", s); return 0; }
|
Il return 0 serve, in genere, ad indicare al sistema operativo a sapere che il programma e' terminato regolarmente.
Se la funzione restituisce un valore, allora e' obbligatorio il return anche se il valore restituito non verra' utilizzato dal chiamante.
Se una funzione non deve restituire un valore allora deve essere dichiarata di tipo void
void funzione()
e in questo caso il return non restituira' alcun valore.
|
|
Dark_Limit (Ex-Member)
Expert
Messaggi: 220
Iscritto: 15/01/2008
|
Si esatto...per esempio nella funzione void, cioè senza uscita(ritorno) di valore , devi semplicemente utilizzare :
Codice sorgente - presumibilmente Plain Text |
return; //senza nessun valore perchè non lo restituisce
|
L'esempio serviva a farti capire che non per forza ci deve essere obbligatoriamente un valore di ritorno numerico in una funzione ma in molti casi anche senza valore (come nel caso precedente) o con valore booleano (TRUE O FALSE).
|
|
xshell32 (Normal User)
Rookie
Messaggi: 34
Iscritto: 08/02/2008
|
Si, ok. Però ho visto anche sorgenti senza un return... è possibile? E poi non riesco a capire in una funzione cosa ritorna, se ritorna qualcosa... sarà che non ho ancora la "forma mentis" dell'informatico.
Per esempio, se scrivessi semplicemente una stringa con printf(), ritorna qualcosa? Invece se scrivessi una operazione aritmetica, ritorna il risultato dell'operazione?.. come si fa a determinarlo? ... sicuramente starò facendo domande stupide, scusate, ma sono un po' zuccone...
Ultima modifica effettuata da xshell32 il 25/02/2008 alle 23:34 |
|
Dark_Limit (Ex-Member)
Expert
Messaggi: 220
Iscritto: 15/01/2008
|
Si è certamente possibile che tu abbia visto un programma senza riturn tranne che nella funzione principale prchè in quella c'è sempre o quasi..Cosa fare ritornare da una funzione viene deciso dal programmatore che utilizzerà quel dato(cioè quello fatto trnare dalla funzione) per un detrminato scopo..Le funzioni vengono create per facilitare lo sviluppo dei applicazioni complesse..devi pensare le funzioni come un sottoprogramma vero e peoprio nel quale si svolgono determinate operazioni..quelle operazioni ritorneranno un valore o meno a seconda del tipo della funzione..
per risponderti anche all'altra dimanda direi proprio che printf deve accettare un parametro stringa pertanto che si usa per stampare qualcosa a scehrmo e in quel caso il valore di ritorno l'output...le funzioni come quella precedentemente descritta( printf() per intenderci) sono già pronte tramite librerie...altre se le realizzeranno i programmatori in base al loro scopo..
|
|
gantonio (Normal User)
Guru^2
Messaggi: 1532
Iscritto: 09/09/2007
|
Postato originariamente da xshell32:
Si, ok. Però ho visto anche sorgenti senza un return... è possibile? |
Certo ... quando una funzione e' di tipo void (ovvero non ritorna alcun valore) allora e' possibile inserire il return o non inserirlo; nel secondo caso verra' eseguito un return automatico alla fine della funzione. Cosi'
void funzione()
{
return;
}
o anche
void funzione()
{
}
Se la funzione NON e' void allora e' OBBLIGATORIO il return per restituire il valore indicato.
Al contrario, il codice che CHIAMA la funzione NON e' obbligato a prelevare il valore di ritorno.
Ad esempio, la printf, per come e' definita, restituisce un valore intero di ritorno che tu puoi usare come in questo esempio
int r;
r = printf("Ciao");
e puoi anche non usare
printf("Ciao");
Se una funzione restituisce o meno un valore lo decide il programmatore. Per le funzioni di libreria, devi leggere la documentazione per sapere se restituisce un valore e cosa significa. Ad esempio per la printf leggi la documentazione
http://www.cplusplus.com/reference/clibrary/cstdio/printf. ...
dove c'e' scritto
Return Value
e saprai tutto ...
|
|
xshell32 (Normal User)
Rookie
Messaggi: 34
Iscritto: 08/02/2008
|
Ok, grazie mille! Finalmente ho capito tutto sul return.
Ultima modifica effettuata da xshell32 il 26/02/2008 alle 16:37 |
|