- 06/10/2020
- 4 perc olvasni
-
- c
- n
- M
- g
- S
return
nyilatkozat véget ér a kivégzését egy funkciót, majd visszaadja a vezérlést a hívó funkciót. A végrehajtás a hívásfunkcióban folytatódik a hívást közvetlenül követő ponton. Areturn
utasítás visszatérhet egy értéket a hívó függvény. További információkért lásd: visszatérési típus.
jump-statement:
return
expresszionopt;
a kifejezés, ha jelen van, visszatér a hívási funkcióhoz. Ha a kifejezés elhagyásra kerül, a függvény visszatérési értéke nem definiált. A kifejezés, ha jelen van, kiértékelésre kerül, majd átalakításra kerül a függvény által visszaküldött típusra. Ha egyreturn
utasítás olyan függvényekben tartalmaz egy kifejezést, amelyek void
visszatérési típusúak, a fordító figyelmeztetést generál, és a kifejezés NEM kerül kiértékelésre.
ha nemreturn
utasítás jelenik meg egy függvénydefinícióban, akkor a vezérlő automatikusan visszatér a hívófunkcióhoz, miután a hívott függvény utolsó kijelentése végrehajtásra került. Ebben az esetben a hívott függvény visszatérési értéke nem definiált. Ha a függvénynek a void
– tól eltérő visszatérési típusa van, akkor ez egy komoly hiba, a fordító pedig figyelmeztető diagnosztikai üzenetet nyomtat. Ha a függvénynek void
visszatérési típusa van, akkor ez a viselkedés rendben van, de rossz stílusnak tekinthető. Használjon egyszerű return
nyilatkozatot, hogy világossá tegye szándékát.
jó mérnöki gyakorlatként mindig adja meg a funkciók visszatérési típusát. Ha nincs szükség visszatérési értékre, állapítsa meg, hogy a függvény void
visszatérési típus. Ha nincs megadva visszatérési típus, a C fordító a int
alapértelmezett visszatérési típusát feltételezi.
sok programozó zárójeleket használ a return
utasítás kifejezés Argumentumának csatolásához. A C azonban nem igényli a zárójeleket.
a fordító figyelmeztető diagnosztikai üzenetet adhat ki az elérhetetlen kódról, ha a return
utasítás után elhelyezett kijelentéseket talál.
a main
függvényben areturn
nyilatkozat és kifejezés választható. Mi történik a visszaküldött értékkel, ha meg van adva, a végrehajtástól függ. Microsoft-specifikus: a Microsoft C implementáció visszaadja a kifejezés értékét a programra hivatkozó folyamathoz, például a cmd.exe
. Ha nincs return
kifejezés, akkor a Microsoft C futásidejű értéke olyan értéket ad vissza, amely jelzi a sikert (0) vagy a hibát (nem nulla érték).
példa
Ez a példa egy program több részből áll. Bemutatja a return
utasítást, valamint azt, hogy hogyan használják mind a funkció végrehajtásának befejezéséhez, mind pedig adott esetben egy érték visszaadásához.
// 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 );}
a square
függvény az argumentum négyzetét adja vissza szélesebb típusban, hogy megakadályozza a számtani hibát. Microsoft-specifikus: a Microsoft C implementációban a long long
típus elég nagy ahhoz, hogy két int
érték termékét túlcsordulás nélkül tartsa.
areturn
square
kifejezés zárójelét a kifejezés részeként értékelik, és areturn
utasítás nem írja elő.
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;}
a ratio
függvény két int
Argumentumának arányát adja vissza lebegőpontként double
érték. Areturn
kifejezés egy lebegőpontos műveletet kényszerít arra, hogy az egyik operandust double
– ra öntse. Ellenkező esetben az egész Osztás operátort használnák, a frakcionált rész pedig elvész.
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.}
The report_square
függvényhívások square
a INT_MAX
paraméterértékével a legnagyobb aláírt egész szám, amely egy int
. Along long
eredményt asquared
tárolja, majd kinyomtatja. Areport_square
függvénynekvoid
visszatérési típusa van, így nincs kifejezés areturn
nyilatkozatában.
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.}
The report_ratio
függvényhívások ratio
1
és INT_MAX
div>. Adouble
eredményt afraction
tárolja, majd kinyomtatja. Areport_ratio
függvénynekvoid
visszatérési típusa van, így nem kell kifejezetten visszaadni egy értéket. report_ratio
“leesik az aljáról”, és nem ad vissza értéket a hívónak.
int main(){ int n = 1; int x = INT_MAX; report_square(); report_ratio( n, x ); return 0;}
The main
function calls two functions: report_square
and report_ratio
. Mivel a report_square
nem vesz fel semmilyen paramétert és nem adja vissza a void
értéket, nem rendeljük az eredményét egy változóhoz. Hasonlóképpen, report_ratio
visszatér void
, tehát a visszatérési értékét sem mentjük el. Ezen funkcióhívások mindegyike után a végrehajtás a következő nyilatkozatban folytatódik. Ezután amain
0
értéket ad vissza (általában a siker bejelentésére használják) a program befejezéséhez.
a példa összeállításához hozzon létre egy C_return_statement.c
nevű forráskódfájlt. Ezután másolja az összes példakódot a megjelenített sorrendben. Mentse el a fájlt, majd fordítsa le egy fejlesztői parancssor ablakba a következő paranccsal:
cl /W4 C_return_statement.c
ezután a példakód futtatásához írja be a C_return_statement.exe
parancsot. A példa kimenete így néz ki: