- 06/10/2020
- 4 minute pentru a citi
-
- c
- n
- m
- g
- s
a return
declarație se termină executarea unei funcții și returnează controlul funcției de apelare. Executarea se reia în funcția de apelare în punctul imediat următor apelului. O declarațiereturn
poate returna o valoare funcției de apelare. Pentru mai multe informații, consultați Tipul de returnare.
sintaxă
Jump-declarație:
return
expressionopt;
valoarea expresiei, dacă este prezent, este returnat la funcția de apelare. Dacă expresia este omisă, valoarea returnată a funcției este nedefinită. Expresia, dacă este prezentă, este evaluată și apoi convertită la tipul returnat de funcție. Atunci când un return
declarație conține o expresie în funcții care au un void
tip retur, compilatorul generează un avertisment, iar expresia nu este evaluată.
dacă nu apare nicio instrucțiunereturn
într-o definiție a funcției, control revine automat la funcția de apelare după executarea ultimei instrucțiuni a funcției apelate. În acest caz, valoarea returnată a funcției apelate este nedefinită. Dacă funcția are un alt tip de retur decâtvoid
, este o eroare gravă, iar compilatorul imprimă un mesaj de diagnosticare de avertizare. Dacă funcția are un void
tip retur, acest comportament este în regulă, dar poate fi considerat stil slab. Utilizați o declarație return
pentru a vă clarifica intenția.
ca o bună practică de inginerie, specificați întotdeauna un tip de retur pentru funcțiile dvs. Dacă nu este necesară o valoare returnată, declarați funcția ca avândvoid
tip retur. Dacă nu este specificat un tip de retur, compilatorul C presupune un tip de retur implicit de int
.
mulți programatori folosesc paranteze pentru a include argumentul expresieireturn
declarație. Cu toate acestea, C nu necesită paranteze.
compilatorul poate emite un mesaj de diagnosticare de avertizare despre codul inaccesibil dacă găsește orice declarații plasate dupăreturn
declarație.
într-omain
funcție,return
declarație și expresie sunt opționale. Ce se întâmplă cu valoarea returnată, dacă este specificată, depinde de implementare. Specific Microsoft: implementarea Microsoft C returnează valoarea expresiei la procesul care a invocat programul, cum ar fi cmd.exe
. Dacă nu este furnizată expresiareturn
, Microsoft C Runtime returnează o valoare care indică succesul (0) sau eșecul (o valoare diferită de zero).
exemplu
acest exemplu este un program în mai multe părți. Acesta demonstreazăreturn
declarație, și modul în care este folosit atât pentru a termina executarea funcției, și opțional, pentru a returna o valoare.
// 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
funcția returnează pătratul argumentului său, într-un tip mai larg pentru a preveni o eroare aritmetică. Specific Microsoft: în implementarea Microsoft C, long long
tipul este suficient de mare pentru a ține produsul a două int
valori fără preaplin.
parantezele din jurul expresieireturn
dinsquare
sunt evaluate ca parte a expresiei și nu sunt cerute dereturn
.
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;}
funcțiaratio
returnează raportul dintre cele două argumenteint
ca valoare în virgulă mobilădouble
. Expresiareturn
este forțată să utilizeze o operație în virgulă mobilă prin aruncarea unuia dintre operanzi ladouble
. În caz contrar, operatorul de diviziune întreg ar fi utilizat, iar partea fracționată ar fi pierdută.
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
funcția apelează square
cu o valoare a parametrului INT_MAX
, cea mai mare valoare întreagă semnată care se potrivește într-un int
. Rezultatullong long
este stocat însquared
, apoi tipărit. report_square
funcția are unvoid
tip de retur, deci nu are o expresie înreturn
declarație.
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.}
funcția report_ratio
apelează ratio
cu valori ale parametrilor 1
și INT_MAX
. Rezultatuldouble
este stocat înfraction
, apoi tipărit. Funcțiareport_ratio
are un tip de returnarevoid
, deci nu trebuie să returneze în mod explicit o valoare. Executarea report_ratio
” cade de jos ” și returnează nici o valoare apelantului.
int main(){ int n = 1; int x = INT_MAX; report_square(); report_ratio( n, x ); return 0;}
main
funcția apelează două funcții:report_square
șireport_ratio
. Ca report_square
nu ia parametri și returnează void
, nu atribuim rezultatul său unei variabile. De asemenea,report_ratio
returneazăvoid
, deci nu salvăm nici valoarea returnată. După fiecare dintre aceste apeluri de funcții, execuția continuă la următoarea instrucțiune. Apoi main
returnează o valoare de 0
(de obicei folosit pentru a raporta succesul) pentru a termina programul.
pentru a compila exemplul, creați un fișier de cod sursă numit C_return_statement.c
. Apoi, copiați tot codul de exemplu, în ordinea afișată. Salvați fișierul și compilați-l într-o fereastră de prompt de comandă pentru dezvoltatori utilizând comanda:
cl /W4 C_return_statement.c
apoi, pentru a rula codul de exemplu, introduceți C_return_statement.exe
la promptul de comandă. Rezultatul exemplului arată astfel: