return
Istruzione (C)
Un'istruzione return
termina l'esecuzione di una funzione e restituisce il controllo alla funzione chiamante. Nella funzione chiamante, l'esecuzione riprende dal punto immediatamente successivo alla chiamata. Un'istruzione return
può restituire un valore alla funzione chiamante. Per altre informazioni, vedere Tipo restituito.
Sintassi
jump-statement
:
return
expression
Optare;
Il valore di expression
, se presente, viene restituito alla funzione chiamante. Se expression
viene omesso, il valore restituito della funzione non è definito. L'espressione, se presente, viene valutata e viene quindi convertita nel tipo restituito dalla funzione. Quando un'istruzione return
contiene un'espressione nelle funzioni con un void
tipo restituito, il compilatore genera un avviso e l'espressione non viene valutata.
Se nessuna istruzione return
viene visualizzata in una definizione di funzione, il controllo ritorna automaticamente alla funzione chiamante dopo che l'ultima istruzione della funzione chiamata viene eseguita. In questo caso, il valore restituito della funzione chiamata è indefinito. Se la funzione ha un tipo restituito diverso da void
, si tratta di un bug grave e il compilatore stampa un messaggio di diagnostica di avviso. Se la funzione ha un void
tipo restituito, questo comportamento va bene, ma può essere considerato uno stile non corretto. Usare un'istruzione normale return
per chiarire la finalità.
Come procedura di progettazione consigliata, specificare sempre un tipo restituito per le funzioni. Se non è necessario un valore restituito, dichiarare la funzione per avere void
un tipo restituito. Se non viene specificato un tipo restituito, il compilatore C presuppone un tipo restituito predefinito di int
.
Molti programmatori usano parentesi per racchiudere l'argomento expression
dell'istruzione return
. Tuttavia, C non richiede le parentesi.
Il compilatore può generare un messaggio di diagnostica di avviso relativo al codice non raggiungibile se trova istruzioni inserite dopo l'istruzione return
.
In una main
funzione l'istruzione e l'espressione return
sono facoltative. Ciò che accade al valore restituito, se specificato, dipende dall'implementazione. Specifica di Microsoft: l'implementazione di Microsoft C restituisce il valore dell'espressione al processo che ha richiamato il programma, ad esempio cmd.exe
. Se non viene fornita alcuna return
espressione, il runtime di Microsoft C restituisce un valore che indica l'esito positivo (0) o l'errore (un valore diverso da zero).
Esempio
Questo esempio è un programma in diverse parti. Illustra l'istruzione return
e come viene usata sia per terminare l'esecuzione della funzione che, facoltativamente, per restituire un valore.
// C_return_statement.c
// Compile using: cl /W4 C_return_statement.c
#include <limits.h> // for INT_MAX
#include <stdio.h> // for printf
long long square( int value )
{
// Cast one operand to long long to force the
// expression to be evaluated as type long long.
// Note that parentheses around the return expression
// are allowed, but not required here.
return ( value * (long long) value );
}
La square
funzione restituisce il quadrato del relativo argomento, in un tipo più ampio per evitare un errore aritmetico. Specifico di Microsoft: nell'implementazione di Microsoft C, il long long
tipo è sufficientemente grande da contenere il prodotto di due int
valori senza overflow.
Le parentesi intorno all'espressione return
in square
vengono valutate come parte dell'espressione e non sono richieste dall'istruzione return
.
double ratio( int numerator, int denominator )
{
// Cast one operand to double to force floating-point
// division. Otherwise, integer division is used,
// then the result is converted to the return type.
return numerator / (double) denominator;
}
La ratio
funzione restituisce il rapporto dei due int
argomenti come valore a double
virgola mobile. L'espressione return
viene forzata a usare un'operazione a virgola mobile eseguendo il cast di uno degli operandi in double
. In caso contrario, verrà usato l'operatore di divisione integer e la parte frazionaria andrebbe persa.
void report_square( void )
{
int value = INT_MAX;
long long squared = 0LL;
squared = square( value );
printf( "value = %d, squared = %lld\n", value, squared );
return; // Use an empty expression to return void.
}
La report_square
funzione chiama square
con un valore di parametro pari INT_MAX
a , il valore intero con segno più grande che rientra in un oggetto int
. Il long long
risultato viene archiviato in squared
, quindi stampato. La report_square
funzione ha un void
tipo restituito, quindi non ha un'espressione nella relativa return
istruzione.
void report_ratio( int top, int bottom )
{
double fraction = ratio( top, bottom );
printf( "%d / %d = %.16f\n", top, bottom, fraction );
// It's okay to have no return statement for functions
// that have void return types.
}
La report_ratio
funzione chiama ratio
con i valori dei parametri di 1
e INT_MAX
. Il double
risultato viene archiviato in fraction
, quindi stampato. La report_ratio
funzione ha un void
tipo restituito, quindi non è necessario restituire in modo esplicito un valore. L'esecuzione di report_ratio
"scende in basso" e non restituisce alcun valore al chiamante.
int main()
{
int n = 1;
int x = INT_MAX;
report_square();
report_ratio( n, x );
return 0;
}
La main
funzione chiama due funzioni: report_square
e report_ratio
. Poiché report_square
non accetta parametri e restituisce void
, il risultato non viene assegnato a una variabile. Allo stesso modo, report_ratio
restituisce void
, quindi non viene salvato il valore restituito, né. Dopo ognuna di queste chiamate di funzione, l'esecuzione continua all'istruzione successiva. Restituisce quindi main
un valore di 0
(in genere usato per segnalare l'esito positivo) per terminare il programma.
Per compilare l'esempio, creare un file di codice sorgente denominato C_return_statement.c
. Copiare quindi tutto il codice di esempio nell'ordine indicato. Salvare il file e compilarlo in una finestra del prompt dei comandi per gli sviluppatori usando il comando :
cl /W4 C_return_statement.c
Quindi, per eseguire il codice di esempio, immettere C_return_statement.exe
al prompt dei comandi. L'output dell'esempio è analogo al seguente:
value = 2147483647, squared = 4611686014132420609
1 / 2147483647 = 0.0000000004656613
Vedi anche
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per