return Statement (C)

  • 06/10/2020
  • 4 minuter att läsa
    • c
    • n
    • c
    • n
    • m
    • g
    • s

areturnutförande av en funktion och returnerar kontrollen till anropsfunktionen. Utförandet återupptas i samtalsfunktionen vid den punkt som omedelbart följer samtalet. Ettreturn– uttalande kan returnera ett värde till anropsfunktionen. Mer information finns i returtyp.

Syntax

hoppa-uttalande:
return expressionopt;

värdet av uttrycket, om det finns, returneras till samtalsfunktionen. Om uttryck utelämnas är funktionens returvärde odefinierat. Uttrycket, om det finns, utvärderas och konverteras sedan till den typ som returneras av funktionen. När ettreturn – uttalande innehåller ett uttryck i funktioner som har ettvoid returtyp genererar kompilatorn en varning och uttrycket utvärderas inte.

om ingetreturn – uttalande visas i en funktionsdefinition återgår kontrollen automatiskt till anropsfunktionen efter att den sista satsen för den uppringda funktionen har utförts. I detta fall är returvärdet för den uppringda funktionen odefinierat. Om funktionen har en annan returtyp än void är det ett allvarligt fel och kompilatorn skriver ut ett varningsdiagnostiskt meddelande. Om funktionen har en void returtyp är detta beteende okej, men kan betraktas som dålig stil. Använd ett vanligtreturn uttalande för att göra din avsikt tydlig.

som en bra teknisk praxis, ange alltid en returtyp för dina funktioner. Om ett returvärde inte krävs anger du att funktionen harvoid returtyp. Om en returtyp inte anges antar C-kompilatorn en standard returtyp av int.

många programmerare använder parenteser för att bifoga uttrycket argumentet förreturn uttalande. Men C kräver inte parenteserna.

kompilatorn kan utfärda ett varningsdiagnostiskt meddelande om oåtkomlig kod om den hittar några uttalanden placerade efterreturn uttalande.

i enmain funktion ärreturn uttalande och uttryck valfria. Vad som händer med det returnerade värdet, om ett anges, beror på implementeringen. Microsoft-specifikt: Microsoft C-implementeringen returnerar uttrycksvärdet till processen som åberopade programmet, till exempel cmd.exe. Om ingetreturn uttryck levereras returnerar Microsoft C runtime ett värde som indikerar framgång (0) eller fel (ett icke-nollvärde).

exempel

detta exempel är ett program i flera delar. Det visar return – uttalandet och hur det används både för att avsluta funktionsexekveringen och eventuellt för att returnera ett värde.

// 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 Returnerar kvadraten av sitt argument, i en bredare typ för att förhindra ett aritmetiskt fel. Microsoft-specifik: i Microsoft C-implementeringen ärlong long – typen tillräckligt stor för att hålla produkten av tvåint värden utan överflöde.

parenteserna kringreturn uttryck isquare utvärderas som en del av uttrycket, och krävs inte avreturn uttalande.

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 returnerar förhållandet mellan dess tvåint argument som en flytpunktdouble värde. Uttrycketreturn tvingas använda en flytpunktsoperation genom att casta en av operanderna tilldouble. I annat fall skulle heltalsdelningsoperatören användas, och bråkdelen skulle gå förlorad.

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 funktionssamtal square med ett parametervärde på INT_MAX, det största signerade heltalsvärdet som passar i ett int. Resultatetlong long lagras isquared och skrivs sedan ut. Funktionenreport_square har ettvoid returtyp, så det har inget uttryck i dessreturn uttalande.

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 funktionssamtal ratio med parametervärden på 1 och INT_MAX. Resultatetdouble lagras i fraction och skrivs sedan ut. Funktionenreport_ratio har envoid returtyp, så det behöver inte uttryckligen returnera ett värde. Utförande av report_ratio ”faller av botten” och returnerar inget värde till den som ringer.

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

main funktionen anropar två funktioner:report_square ochreport_ratio. Eftersom report_squaretar inga parametrar och returnerarvoid tilldelar vi inte resultatet till en variabel. På samma sättreport_ratio returnerarvoid, så vi sparar inte dess returvärde heller. Efter vart och ett av dessa funktionssamtal fortsätter körningen vid nästa uttalande. Dåmain returnerar ett värde på0 (vanligtvis används för att rapportera framgång) för att avsluta programmet.

för att kompilera exemplet, skapa en källkodsfil med namnet C_return_statement.c. Kopiera sedan all exempelkod i den ordning som visas. Spara filen och kompilera den i ett kommandotolkfönster för utvecklare med kommandot:

cl /W4 C_return_statement.c

för att köra exempelkoden anger du C_return_statement.exe vid kommandotolken. Utmatningen av exemplet ser ut så här:

Related Posts

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *