return Statement (C)

  • 06/10/2020
  • 4 minutter at læse
    • c
    • n
    • m
    • g
    • s

a return sætning afslutter udførelsen af en funktion og returnerer kontrolelementet til opkaldsfunktionen. Udførelsen genoptages i opkaldsfunktionen på det punkt umiddelbart efter opkaldet. Enreturn erklæring kan returnere en værdi til opkaldsfunktionen. For mere information, se returtype.

syntaks

jump-statement:
return udtrykopt ;

værdien af udtryk, hvis det er til stede, returneres til opkaldsfunktionen. Hvis udtryk udelades, er funktionens returværdi udefineret. Udtrykket, hvis det er til stede, evalueres og konverteres derefter til den type, der returneres af funktionen. Når enreturn sætning indeholder et udtryk i funktioner, der har envoid returtype, genererer kompilatoren en advarsel, og udtrykket evalueres ikke.

Hvis ingenreturn erklæring vises i en funktionsdefinition, vender kontrol automatisk tilbage til opkaldsfunktionen, efter at den sidste sætning af den kaldte funktion er udført. I dette tilfælde er returværdien af den kaldte funktion udefineret. Hvis funktionen har en anden returtype end void, er det en alvorlig fejl, og kompilatoren udskriver en advarselsdiagnostisk besked. Hvis funktionen har en void returtype, er denne opførsel okay, men kan betragtes som dårlig stil. Brug en almindeligreturn erklæring for at gøre din hensigt klar.

som en god ingeniørpraksis skal du altid angive en returtype for dine funktioner. Hvis en returværdi ikke er påkrævet, skal du erklære funktionen for at have void returtype. Hvis en returtype ikke er angivet, antager C-kompilatoren en standard returtype int.

mange programmører bruger parenteser til at vedlægge ekspressionsargumentet for return erklæring. C kræver dog ikke parenteserne.

kompilatoren kan udstede en advarselsdiagnostisk meddelelse om utilgængelig kode, hvis den finder nogen udsagn placeret efterreturn erklæring.

i en main funktion er return sætning og udtryk valgfri. Hvad der sker med den returnerede værdi, hvis en er angivet, afhænger af implementeringen. Microsoft-specifik: Microsoft C-implementeringen returnerer ekspressionsværdien til den proces, der påberåbte programmet, såsom cmd.exe. Hvis der ikke leveres nogen return udtryk, returnerer Microsoft C runtime en værdi, der angiver succes (0) eller fiasko (en værdi, der ikke er nul).

eksempel

dette eksempel er et program i flere dele. Det demonstrerer return – sætningen, og hvordan den bruges både til at afslutte funktionsudførelse og eventuelt til at returnere en værdi.

// 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 );}

funktionensquare returnerer kvadratet af dets argument i en bredere type for at forhindre en aritmetisk fejl. Microsoft-specifik: i Microsoft C-implementeringen er long long typen stor nok til at holde produktet af to int værdier uden overløb.

parenteserne omkringreturn udtryk isquare evalueres som en del af udtrykket og kræves ikke afreturn erklæring.

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;}

funktionenratio returnerer forholdet mellem dets toint argumenter som et flydende punktdouble værdi. Udtrykketreturn er tvunget til at bruge en flydende punktoperation ved at kaste en af operandene tildouble. Ellers ville heltalsdelingsoperatøren blive brugt, og den delvise del ville gå tabt.

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 funktion opkald square med en parameterværdi på INT_MAX, den største signerede heltalværdi, der passer ind i en intlong long resultatet gemmes isquared, derefter udskrevet. Funktionenreport_square har envoid returtype, så den har ikke et udtryk i sinreturn erklæring.

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 funktion opkald ratio med parameterværdier af 1 og INT_MAXdouble resultatet gemmes ifraction, derefter udskrevet. Funktionenreport_ratio har envoid returtype, så det behøver ikke eksplicit at returnere en værdi. Udførelse af report_ratio “falder fra bunden” og returnerer ingen værdi til den, der ringer op.

int main(){ int n = 1; int x = INT_MAX; report_square(); report_ratio( n, x ); return 0;}

main funktionen kalder to funktioner:report_square ogreport_ratio. Som report_squaretager ingen parametre og returnerervoid, tildeler vi ikke resultatet til en variabel. Ligeledesreport_ratio returnerervoid, så vi gemmer heller ikke dens returværdi. Efter hvert af disse funktionsopkald fortsætter udførelsen ved den næste erklæring. Såmain returnerer en værdi af0 (typisk bruges til at rapportere succes) for at afslutte programmet.

for at kompilere eksemplet skal du oprette en kildekodefil med navnetC_return_statement.c. Kopier derefter al eksempelkoden i den viste rækkefølge. Gem filen, og kompilere det i en udvikler kommandoprompt vindue ved hjælp af kommandoen:

cl /W4 C_return_statement.c

indtast derefter C_return_statement.exe ved kommandoprompten for at køre eksempelkoden. Udgangen af eksemplet ser sådan ud:

Related Posts

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *