- 06/10/2020
- 4 minuten te lezen
-
- c
- n
- M
- g
- S
Een return
verklaring eindigt met de uitvoering van een functie, en keert u terug naar de aanroepende functie. De uitvoering wordt hervat in de aanroepfunctie op het punt onmiddellijk na de oproep. Eenreturn
statement kan een waarde teruggeven aan de aanroepende functie. Zie retourtype voor meer informatie.
syntaxis
jump-statement:
return
expressionopt;
de waarde van de expressie, indien aanwezig, wordt geretourneerd naar de oproepende functie. Als expressie wordt weggelaten, is de retourwaarde van de functie niet gedefinieerd. De expressie, indien aanwezig, wordt geëvalueerd en vervolgens geconverteerd naar het type dat door de functie wordt geretourneerd. Wanneer eenreturn
statement een expressie bevat in functies die eenvoid
return type hebben, genereert de compiler een waarschuwing en wordt de expressie niet geëvalueerd.
als er geenreturn
statement verschijnt in een functiedefinitie, keert control automatisch terug naar de aanroepende functie nadat de laatste statement van de aangeroepen functie is uitgevoerd. In dit geval is de retourwaarde van de aangeroepen functie niet gedefinieerd. Als de functie een ander retourtype heeft dan void
, is het een ernstige bug, en de compiler drukt een waarschuwingsdiagnostisch bericht af. Als de functie een void
return type heeft, is dit gedrag in orde, maar kan als slechte stijl worden beschouwd. Gebruik een eenvoudigereturn
verklaring om uw intentie duidelijk te maken.
als een goede engineering praktijk, geef altijd een return type voor uw functies. Als een retourwaarde niet vereist is, verklaar dan dat de functie void
retourtype heeft. Als een return type niet is opgegeven, neemt de C compiler een standaard return type aan van int
.
veel programmeurs gebruiken haakjes om het expressieargument van het return
statement in te sluiten. C heeft echter geen haakjes nodig.
de compiler kan een diagnostisch waarschuwingsbericht geven over onbereikbare code als het enige statements vindt geplaatst na de return
statement.
In een main
functie, zijn de return
statement en expressie optioneel. Wat er gebeurt met de geretourneerde waarde, als die wordt opgegeven, hangt af van de implementatie. Microsoft-specifiek: de Microsoft C-implementatie geeft de expressiewaarde terug aan het proces dat het programma aanriep, zoals cmd.exe
. Als er geenreturn
expressie wordt gegeven, geeft de Microsoft C runtime een waarde terug die succes (0) of mislukking aangeeft (een niet-nulwaarde).
voorbeeld
dit voorbeeld is één programma in meerdere delen. Het toont hetreturn
statement, en hoe het zowel wordt gebruikt om de uitvoering van de functie te beëindigen, als optioneel om een waarde te retourneren.
// C_return_statement.c// Compile using: cl /W4 C_return_statement.c#include <limits.h> // for INT_MAX#include <stdio.h> // for printflong 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 );}
de functie square
geeft het kwadraat van zijn argument terug, in een breder type om een rekenkundige fout te voorkomen. Microsoft-specifiek: in de Microsoft C-implementatie is het long long
type groot genoeg om het product van twee int
waarden zonder overflow te bevatten.
de haakjes rond dereturn
expressie insquare
worden geëvalueerd als onderdeel van de expressie, en zijn niet vereist door dereturn
verklaring.
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;}
de functie ratio
geeft de verhouding van zijn twee int
argumenten als een floating-point double
waarde. De expressie return
wordt gedwongen om een floating-point operatie te gebruiken door een van de operanden te gieten op double
. Anders zou de integer delingsoperator worden gebruikt en zou het fractionele deel verloren gaan.
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.}
de report_square
functieaanroepen square
met een parameterwaarde van INT_MAX
, de grootste ondertekende integer waarde die past in een int
. Het long long
resultaat wordt opgeslagen in squared
en vervolgens afgedrukt. De functie report_square
heeft een void
return type, dus het heeft geen expressie in zijn return
statement.
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.}
de report_ratio
functieaanroepen ratio
met parameterwaarden van 1
en INT_MAX
. Het double
resultaat wordt opgeslagen in fraction
en vervolgens afgedrukt. De functie report_ratio
heeft een void
return type, dus het hoeft geen waarde expliciet te retourneren. Uitvoering van report_ratio
” valt van de bodem ” en geeft geen waarde terug aan de beller.
int main(){ int n = 1; int x = INT_MAX; report_square(); report_ratio( n, x ); return 0;}
de functie main
roept twee functies aan: report_square
en report_ratio
. Aangezien report_square
geen parameters neemt en void
retourneert, kennen we het resultaat niet toe aan een variabele. Op dezelfde manier geeft report_ratio
void
terug, dus we slaan de retourwaarde ook niet op. Na elk van deze functie aanroepen, uitvoering gaat door bij de volgende verklaring. Daarna geeft main
een waarde van 0
(meestal gebruikt om succes te rapporteren) om het programma te beëindigen.
om het voorbeeld te compileren, maakt u een broncodebestand aan met de naam C_return_statement.c
. Kopieer vervolgens alle voorbeeldcode, in de getoonde volgorde. Sla het bestand op en compileer het in een opdrachtpromptvenster voor ontwikkelaars met de opdracht:
cl /W4 C_return_statement.c
om de voorbeeldcode uit te voeren, voert u C_return_statement.exe
achter de opdrachtprompt in. De uitvoer van het voorbeeld ziet er als volgt uit: