名稱空間
變體
操作

return 語句

來自 cppreference.com
< c‎ | 語言

終止當前函式並將指定值返回給呼叫函式。

目錄

[編輯] 語法

attr-spec-seq(可選) return expression ; (1)
attr-spec-seq(可選) return ; (2)
表示式 - 用於初始化函式返回值的表示式
屬性說明序列 - (C23 起)可選的屬性列表,應用於 return 語句

[編輯] 解釋

1) 求值表示式,終止當前函式並將表示式的結果返回給呼叫者(返回的值成為函式呼叫表示式的值)。僅當函式返回型別不是void時有效。
2) 終止當前函式。僅當函式返回型別為void時有效。

如果表示式的型別與函式的返回型別不同,其值將像透過賦值給其型別為函式返回型別的物件一樣進行轉換,但物件表示之間的重疊是允許的。

struct s { double i; } f(void); // function returning struct s
union { struct { int f1; struct s f2; } u1;
        struct { struct s f3; int f4; } u2; } g;
struct s f(void)
{
    return g.u1.f2;
}
int main(void)
{
// g.u2.f3 = g.u1.f2; // undefined behavior (overlap in assignment)
   g.u2.f3 = f();     // well-defined
}

如果返回型別是實浮點型別,則結果可能以比新型別所隱含的更大範圍和精度表示。

到達返回void的函式末尾等同於return;。如果函式的結果在表示式中使用(允許丟棄此類返回值),則到達任何其他返回值函式的末尾是未定義行為。對於main,參見main函式

永不返回函式中執行return語句是未定義行為。

(C11 起)

[編輯] 關鍵詞

return

[編輯] 示例

#include <stdio.h>
 
void fa(int i)
{
    if (i == 2)
       return;
    printf("fa():   %d\n", i);
} // implied return;
 
int fb(int i)
{
    if (i > 4)
       return 4;
    printf("fb():   %d\n", i);
    return 2;
}
 
int main(void)
{
    fa(2);
    fa(1);
    int i = fb(5);   // the return value 4 used to initializes i
    i = fb(i);       // the return value 2 used as rhs of assignment
    printf("main(): %d\n", i);
}

輸出

fa():   1
fb():   4
main(): 2

[編輯] 參考

  • C17 標準 (ISO/IEC 9899:2018)
  • 6.8.6.4 return 語句 (p: 111-112)
  • C11 標準 (ISO/IEC 9899:2011)
  • 6.8.6.4 return 語句 (p: 154)
  • C99 標準 (ISO/IEC 9899:1999)
  • 6.8.6.4 return 語句 (p: 139)
  • C89/C90 標準 (ISO/IEC 9899:1990)
  • 3.6.6.4 return 語句

[編輯] 參閱

C++ 文件,關於return 語句