Delen via


return Instructie (C)

Een return instructie beëindigt de uitvoering van een functie en retourneert het besturingselement naar de aanroepende functie. De uitvoering wordt hervat in de aanroepfunctie op het punt direct na de aanroep. Een return instructie kan een waarde retourneren aan de aanroepende functie. Zie Retourtype voor meer informatie.

Syntaxis

jump-statement:
return expression opteren;

De waarde van expression, indien aanwezig, wordt geretourneerd naar de aanroepende functie. Als expression dit 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 een return instructie een expressie bevat in functies met een void retourtype, genereert de compiler een waarschuwing en wordt de expressie niet geëvalueerd.

Als er geen return instructie wordt weergegeven in een functiedefinitie, keert het besturingselement automatisch terug naar de aanroepende functie nadat de laatste instructie 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 fout en drukt de compiler een waarschuwingsdiagnosebericht af. Als de functie een void retourtype heeft, is dit gedrag in orde, maar kan deze als slechte stijl worden beschouwd. Gebruik een duidelijke return instructie om uw intentie duidelijk te maken.

Geef als goede technische praktijk altijd een retourtype op voor uw functies. Als een retourwaarde niet vereist is, declareert u de functie om een retourtype te hebben void . Als er geen retourtype is opgegeven, gaat de C-compiler uit van een standaard retourtype.int

Veel programmeurs gebruiken haakjes om het expression argument van de return instructie in te sluiten. C vereist echter geen haakjes.

De compiler kan een waarschuwingsdiagnosebericht geven over onbereikbare code als er instructies worden gevonden die na de return instructie zijn geplaatst.

In een main functie zijn de return instructie en expressie optioneel. Wat er gebeurt met de geretourneerde waarde, als er een is opgegeven, is afhankelijk van de implementatie. Microsoft-specifiek: De Microsoft C-implementatie retourneert de expressiewaarde naar het proces dat het programma heeft aangeroepen, zoals cmd.exe. Als er geen return expressie wordt opgegeven, retourneert de Microsoft C-runtime een waarde die aangeeft dat geslaagd (0) of mislukt is (een niet-nulwaarde).

Voorbeeld

Dit voorbeeld is één programma in verschillende delen. De instructie wordt gedemonstreert return en hoe deze wordt gebruikt om de uitvoering van de functie te beëindigen en 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 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 );
}

De square functie retourneert het kwadraat van het argument, 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 te bewaren zonder overloop.

De haakjes rond de return expressie worden square geëvalueerd als onderdeel van de expressie en zijn niet vereist voor de return instructie.

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 ratio functie retourneert de verhouding van de twee int argumenten als een drijvende-kommawaarde double . De return expressie wordt gedwongen om een drijvendekommabewerking te gebruiken door een van de operanden naar toe te doublegieten. Anders zou de operator voor het delen van gehele getallen worden gebruikt en zou het breukdeel 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 functie roept square een parameterwaarde aan van INT_MAX, de grootste ondertekende gehele getalwaarde die in een int. Het long long resultaat wordt opgeslagen in squareden vervolgens afgedrukt. De report_square functie heeft een void retourtype, dus er is geen expressie in return de instructie.

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 functie roept ratio parameterwaarden van 1 en INT_MAX. Het double resultaat wordt opgeslagen in fractionen vervolgens afgedrukt. De report_ratio functie heeft een void retourtype en hoeft dus niet expliciet een waarde te retourneren. Uitvoering van report_ratio 'valt van de onderkant' en retourneert geen waarde aan de aanroeper.

int main()
{
    int n = 1;
    int x = INT_MAX;

    report_square();
    report_ratio( n, x );

    return 0;
}

De main functie roept twee functies aan: report_square en report_ratio. Omdat report_square er geen parameters worden gebruikt en geretourneerd void, wijzen we het resultaat niet toe aan een variabele. Retourneert voidookreport_ratio, zodat we ook de retourwaarde niet opslaan. Nadat elk van deze functieaanroepen is aangeroepen, wordt de uitvoering voortgezet bij de volgende instructie. Retourneert vervolgens main een waarde van 0 (meestal gebruikt om geslaagd te rapporteren) om het programma te beëindigen.

Als u het voorbeeld wilt compileren, maakt u een broncodebestand met de naam C_return_statement.c. Kopieer vervolgens alle voorbeeldcode in de weergegeven volgorde. Sla het bestand op en compileer het in een opdrachtpromptvenster voor ontwikkelaars met behulp van de opdracht:

cl /W4 C_return_statement.c

Voer vervolgens de voorbeeldcode in bij de opdrachtprompt om de voorbeeldcode C_return_statement.exe uit te voeren. De uitvoer van het voorbeeld ziet er als volgt uit:

value = 2147483647, squared = 4611686014132420609
1 / 2147483647 = 0.0000000004656613

Zie ook

Overzichten