declarație de returnare (C)

  • 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 longtipul 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:

Related Posts

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *