共用方式為


return 陳述式 (C)

return 陳述式可結束函式的執行,並且將控制權還給呼叫函式。 執行作業會在進行呼叫的函式中緊接著呼叫之後繼續進行。 return 陳述式可將值傳回至呼叫函式。 如需詳細資訊,請參閱傳回類型

語法

jump-statement
return expressionopt ;

expression 的值 (如果有) 會傳回至呼叫函式。 如果省略 expression,則函式的傳回值會是未定義。 此運算式 (如果有) 會先評估,再轉換為函式所傳回的類型。 當 return 陳述式在具有 void 傳回類型的函式中包含運算式時,編譯器會產生警告,而且不會評估運算式。

如果函式定義中未出現 return 陳述式,則會在執行所呼叫函式的最後一個陳述式之後,自動將控制權還給呼叫函式。 在此情況下,所呼叫函式的傳回值會是未定義。 如果函式具有 void 以外的傳回類型,這是嚴重的錯誤,而編譯器會列印警告診斷訊息。 如果函式具有 void 傳回類型,此行為就沒有問題,但可能被視為不良的樣式。 使用純 return 陳述式來清楚說明您的意圖。

作為良好的工程做法,請一律指定函式的傳回類型。 如果不需要傳回值,請宣告函式具有 void 傳回類型。 如果未指定傳回類型,C 編譯器會假設預設傳回類型為 int

許多程式設計人員使用括號括住 return 陳述式的 expression 引數。 不過,C 不需要括號。

如果編譯器找到放在 return 陳述式之後的任何陳述式,編譯器可能會發出有關執行不到的程式碼的警告診斷訊息。

main 函式中,return 陳述式和運算式都是選擇性的。 如果指定傳回的值,則發生的情況取決於實作。 Microsoft特定:Microsoft C 實作會將運算式值傳回叫用程式的程式,例如 cmd.exe。 如果未提供任何 return 運算式,Microsoft C 執行階段會傳回值,指出成功 (0) 或失敗 (非零值)。

範例

此範例是數個部分中的一個程式。 它會示範 return 陳述式,以及如何同時用來結束函式執行,以及選擇性地傳回值。

// C_return_statement.c
// Compile using: cl /W4 C_return_statement.c
#include <limits.h>      // for INT_MAX
#include <stdio.h>       // for printf

long 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 函式會傳回其引數的平方,以較寬的類型防止算術錯誤。 Microsoft特定:在Microsoft C 實作中,long long 類型足以容納兩個 int 值的乘積,而不會溢位。

square 中括住 return 運算式的括號會當做運算式的一部分評估,return 陳述式則不需要括號。

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

ratio 函式會傳回其兩個 int 引數的比率,做為浮點 double 值。 將其中一個運算式轉換成 doublereturn 運算式就會強制使用浮點運算。 否則會使用整數除法運算子,而小數部分將會遺失。

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 函式會使用 INT_MAX 的參數值呼叫 square,這是符合 int 的最大帶正負號整數值。 long long 結果會儲存在 squared 中,然後加以列印。 report_square 函式具有 void 傳回類型,因此其 return 陳述式中沒有運算式。

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 函式會使用 1INT_MAX 的參數值呼叫 ratiodouble 結果會儲存在 fraction 中,然後加以列印。 report_ratio 函式具有 void 傳回類型,因此不需要明確傳回值。 report_ratio 執行「垮台」,且不會將任何值傳回給呼叫端。

int main()
{
    int n = 1;
    int x = INT_MAX;

    report_square();
    report_ratio( n, x );

    return 0;
}

main 函式會呼叫兩個函式:report_squarereport_ratio。 由於 report_square 不接受任何參數並傳回 void,因此我們不會將其結果指派給變數。 同樣地,report_ratio 會傳回 void,因此我們也不會儲存其傳回值。 在每次呼叫這些函式之後,會在下一個陳述式繼續執行。 然後,main 會傳回 0 值 (通常用來回報成功) 以結束程式。

若要編譯範例,請建立名為 C_return_statement.c 的原始程式碼檔案。 然後,依顯示的順序複製所有範例程式碼。 儲存檔案,並使用以下命令在開發人員命令提示字元視窗中編譯它:

cl /W4 C_return_statement.c

然後,若要執行範例程式碼,請在命令提示字元中輸入 C_return_statement.exe。 此範例的輸出如下所示:

value = 2147483647, squared = 4611686014132420609
1 / 2147483647 = 0.0000000004656613

另請參閱

陳述式