Oppure

Loading
23/02/08 17:23
xshell32
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 23/02/08 17:32
aaa
23/02/08 18:55
gantonio
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 ...

aaa
23/02/08 19:32
xshell32
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 23/02/08 20:08
aaa
23/02/08 21:29
gantonio
Scrivi una funzione che esegue la somma dei due parametri interi passati e la restituisce

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.
aaa
24/02/08 14:04
Dark_Limit
Si esatto...per esempio nella funzione void, cioè senza uscita(ritorno) di valore , devi semplicemente utilizzare :
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:
aaa
25/02/08 22:26
xshell32
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 25/02/08 22:34
aaa
25/02/08 22:47
Dark_Limit
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:
aaa
26/02/08 7:47
gantonio
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

cplusplus.com/reference/clibrary/cstdio/…

dove c'e' scritto

Return Value

e saprai tutto ...
aaa