Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Return
Forum - C/C++ - Return

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Godrek (Normal User)
Rookie


Messaggi: 22
Iscritto: 04/08/2015

Segnala al moderatore
Postato alle 11:01
Giovedì, 19/01/2017
Salve a tutti, avevo da porvi una domanda sicuramente molto banale.
Durante l'esecuzione di una funzione (di tipo non-void), non appena viene letto il comando return "value";
viene terminata prima la funzione e poi restituito il valore rappresentato da "value" oppure viene prima restituito il valore e poi terminata la funzione?


Chi ti critica poi ti imita
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5473
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 11:36
Giovedì, 19/01/2017
Che senso ha questa domanda?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
GN (Member)
Guru


Messaggi: 770
Iscritto: 30/04/2011

Segnala al moderatore
Postato alle 11:39
Giovedì, 19/01/2017
Non so se ho capito bene quello che chiedi, ma io direi semplicemente che il return è l'ultima istruzione di una funzione che viene eseguita. Se c'è un "prima" e un "dopo" probabilmente dipende dal compilatore e/o dall'architettura del processore per cui viene compilato il codice.
Ad esempio nell'architettura MIPS la convenzione per ritornare un valore è metterlo in uno dei registri $v0 o $v1, una volta fatto questo per uscire dalla funzione si mette un'istruzione di salto per riportare il program counter all'indirizzo memorizzato dal chiamante per riprendere l'esecuzione da quel punto.


PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5473
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 11:41
Giovedì, 19/01/2017
In "ogni caso" il valore viene impostato prima del return (come potrebbe essere il contrario?).

Ma la questione è che non ha senso parlare di "restituzione" prima o dopo.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
Godrek (Normal User)
Rookie


Messaggi: 22
Iscritto: 04/08/2015

Segnala al moderatore
Postato alle 11:42
Giovedì, 19/01/2017
Il comando return ha due compiti:
- terminare l'esecuzione della funzione
- restituire un valore alla funzione chiamante

in che ordine esegue queste due operazioni?


Chi ti critica poi ti imita
PM Quote
Avatar
Godrek (Normal User)
Rookie


Messaggi: 22
Iscritto: 04/08/2015

Segnala al moderatore
Postato alle 11:43
Giovedì, 19/01/2017
GN se è come hai detto tu quindi prima ritorna il valore e poi termina la funzione.


Chi ti critica poi ti imita
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5473
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 11:48
Giovedì, 19/01/2017
Testo quotato

Postato originariamente da Godrek:

Il comando return ha due compiti:
- terminare l'esecuzione della funzione
- restituire un valore alla funzione chiamante

in che ordine esegue queste due operazioni?




E' la spiegazione semplicistica di cosa fa il return in C.

Ma la "traduzione" in linguaggio macchina per la CPU, in genere, è

- copio il valore da restituire in un registro (in genere eax)
- esegue un ret per tornare all'indirizzo del codice chiamante

Capito?

Ultima modifica effettuata da nessuno il 19/01/2017 alle 12:01


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5473
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 11:49
Giovedì, 19/01/2017
Testo quotato

Postato originariamente da Godrek:

GN se è come hai detto tu quindi prima ritorna il valore e poi termina la funzione.



Ancora ... !

Non significa nulla prima "ritorna un valore". Che vuol dire secondo te "ritorna un valore"??


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5473
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 11:53
Giovedì, 19/01/2017
In realtà, anche per la funzione void succede la stessa cosa a parte il fatto che il valore non viene impostato nel registro.

E comunque è il chiamante che controlla il valore del registro per determinare il valore restituito. Può anche ignorarlo come avviene quando si chiama una funzione senza tenere conto del valore restituito.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo