- 06/10/2020
- 4 minuuttia luettavaksi
- C
- n
- m
g s
a return
statement ends Funktion suoritus, ja palauttaa kontrollin kutsutoiminnolle. Suoritus jatkuu kutsutoiminnossa heti kutsun jälkeen. return
lausuma voi palauttaa arvon kutsufunktiolle. Lisätietoja on kohdassa Palautustyyppi.
syntaksi
jump-statement:
return
ekspressionopt;
lausekkeen arvo, jos läsnä, palautetaan Kutsumustoiminto. Jos lauseke jätetään pois, funktion palautusarvo on määrittelemätön. Jos lauseke on olemassa, se arvioidaan ja muunnetaan funktion palauttamaksi tyypiksi. Kun return
lauseke sisältää lausekkeen funktioissa, joilla on void
paluutyyppi, kääntäjä tuottaa varoituksen, eikä lauseketta arvioida.
Jos ei return
lauseke esiintyy funktion määritelmässä, ohjaus palaa automaattisesti kutsufunktioon, kun kutsutun funktion viimeinen lauseke on suoritettu. Tällöin kutsutun funktion palautusarvo on määrittelemätön. Jos funktiolla on jokin muu palautustyyppi kuin void
, kyseessä on vakava vika, ja kääntäjä tulostaa varoittavan vianmääritysviestin. Jos funktiolla on void
paluutyyppi, tämä käyttäytyminen on OK, mutta sitä voidaan pitää huonona tyylinä. Käytä tavallista return
lausetta tehdäksesi aikeesi selväksi.
hyvänä insinööritapana määrittele aina toiminnoillesi palautustyyppi. Jos palautusarvoa ei tarvita, ilmoitetaan funktiolla olevan void
palautustyyppi. Jos palautustyyppiä ei ole määritetty, C-kääntäjä olettaa oletustyypin int
.
monet ohjelmoijat käyttävät sulkeita sulkeakseen return
lausekkeen lausekkeen. C ei kuitenkaan vaadi sulkuja.
kääntäjä voi antaa varoittavan vianmääritysviestin saavuttamattomasta koodista, jos se löytää return
lausuman jälkeen asetettuja väittämiä.
main
funktio return
lauseke ja lauseke ovat valinnaisia. Mitä tapahtuu palautetulle arvolle, jos sellainen on määritetty, riippuu toteutuksesta. Microsoft-spesifinen: Microsoft C-toteutus palauttaa lausekkeen arvon ohjelmaan kutsuneelle prosessille, kuten cmd.exe
. Jos ei return
lauseke toimitetaan, Microsoft C runtime palauttaa arvon, joka ilmaisee onnistumista (0) tai epäonnistumista (ei-nolla-arvo).
esimerkki
Tämä esimerkki on YKSI ohjelma useassa osassa. Se osoittaa return
lauseke, ja miten sitä käytetään sekä funktion suorittamisen lopettamiseen, että valinnaisesti arvon palauttamiseen.
// 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 );}
square
funktio palauttaa argumenttinsa neliön laajemmalla tyypillä aritmeettisen virheen estämiseksi. Microsoft-spesifinen: Microsoft C-toteutuksessa long long
tyyppi on riittävän suuri pitämään kahden int
arvon tulon ilman ylivuotoa.
return
lauseke square
arvioidaan osana lauseketta, eikä return
lauseke vaadi niitä.
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;}
ratio
funktio palauttaa kahden int
argumentit liukulukuna double
arvo. return
lauseke pakotetaan käyttämään liukulukuoperaatiota valamalla yksi operandeista double
. Muussa tapauksessa käytettäisiin kokonaislukujaon operaattoria ja murto-osa menetettäisiin.
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.}
report_square
funktiokutsuja square
parametriarvolla INT_MAX
suurin allekirjoitettu kokonaisluku, joka sopii int
long long
tulos tallennetaan squared
, minkä jälkeen tulostetaan. report_square
funktiolla on void
paluutyyppi, joten sillä ei ole lauseketta return
lausekkeessa.
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.}
report_ratio
funktiokutsuja ratio
parametriarvoilla 1
ja INT_MAX
double
tulos tallennetaan fraction
, minkä jälkeen tulostetaan. report_ratio
funktiolla on void
paluutyyppi, joten arvoa ei tarvitse erikseen palauttaa. Suoritus report_ratio
” putoaa pohjalta ” eikä palauta mitään arvoa soittajalle.
int main(){ int n = 1; int x = INT_MAX; report_square(); report_ratio( n, x ); return 0;}
main
funktio kutsuu kahta funktiota: report_square
ja report_ratio
. Koska report_square
ei ota parametreja ja palauttaa void
, emme anna sen tulosta muuttujalle. Samoin report_ratio
palauttaa void
, joten emme myöskään tallenna sen palautusarvoa. Jokaisen funktiokutsun jälkeen suoritus jatkuu seuraavassa lauseessa. Sitten main
palauttaa arvon 0
(käytetään tyypillisesti menestyksen raportointiin) ohjelman lopettamiseksi.
esimerkin kääntämiseksi luo lähdekooditiedosto, jonka nimi on C_return_statement.c
. Sitten, Kopioi kaikki esimerkkikoodi, esitetyssä järjestyksessä. Tallenna tiedosto ja käännä se kehittäjän komentokehoteikkunaan komennolla:
cl /W4 C_return_statement.c
tämän jälkeen, ajaaksesi esimerkkikoodin, Kirjoita C_return_statement.exe
komentokehotteeseen. Esimerkin ulostulo näyttää tältä: