Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - La funzione
Forum - C/C++ - La funzione "Return"

Avatar
xshell32 (Normal User)
Rookie


Messaggi: 34
Iscritto: 08/02/2008

Segnala al moderatore
Postato alle 18:23
Sabato, 23/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
PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 19:55
Sabato, 23/02/2008
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 ...


PM Quote
Avatar
xshell32 (Normal User)
Rookie


Messaggi: 34
Iscritto: 08/02/2008

Segnala al moderatore
Postato alle 20:32
Sabato, 23/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... :D)

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
PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 22:29
Sabato, 23/02/2008
Scrivi una funzione che esegue la somma dei due parametri interi passati e la restituisce

Codice sorgente - presumibilmente C++

  1. int somma(int a, int b)
  2. {
  3.    return a+b;
  4. }
  5.  
  6. int main()
  7. {
  8.    int s, x, y;
  9.  
  10.    x=10;
  11.    y=20;
  12.  
  13.    s=somma(x, y);
  14.  
  15.    printf("somma = %d\n", s);
  16.  
  17.    return 0;
  18. }



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.

PM Quote
Avatar
Dark_Limit (Ex-Member)
Expert


Messaggi: 220
Iscritto: 15/01/2008

Segnala al moderatore
Postato alle 15:04
Domenica, 24/02/2008
Si esatto...per esempio nella funzione void, cioè senza uscita(ritorno) di valore , devi semplicemente utilizzare :
Codice sorgente - presumibilmente Plain Text

  1. 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).:k:

PM Quote
Avatar
xshell32 (Normal User)
Rookie


Messaggi: 34
Iscritto: 08/02/2008

Segnala al moderatore
Postato alle 23:26
Lunedì, 25/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... :D

Ultima modifica effettuata da xshell32 il 25/02/2008 alle 23:34
PM Quote
Avatar
Dark_Limit (Ex-Member)
Expert


Messaggi: 220
Iscritto: 15/01/2008

Segnala al moderatore
Postato alle 23:47
Lunedì, 25/02/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..:k:

PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 8:47
Martedì, 26/02/2008
Testo quotato

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 ...

PM Quote
Avatar
xshell32 (Normal User)
Rookie


Messaggi: 34
Iscritto: 08/02/2008

Segnala al moderatore
Postato alle 16:37
Martedì, 26/02/2008
Ok, grazie mille! Finalmente ho capito tutto sul return.

Ultima modifica effettuata da xshell32 il 26/02/2008 alle 16:37
PM Quote