名前空間
変種
操作

return 文

From cppreference.com
< c‎ | language

現在の関数を終了し、指定された値を呼び出し元の関数に返します。

目次

[編集] 構文

属性指定子シーケンス(任意) return ; (1)
属性指定子シーケンス(任意) return ; (2)
- 関数の戻り値を初期化するために使用される式
attr-spec-seq - (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 関数を参照してください。

no-return 関数内で 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 The return statement (p: 111-112)
  • C11標準 (ISO/IEC 9899:2011)
  • 6.8.6.4 The return statement (p: 154)
  • C99標準 (ISO/IEC 9899:1999)
  • 6.8.6.4 The return statement (p: 139)
  • C89/C90標準 (ISO/IEC 9899:1990)
  • 3.6.6.4 The return statement

[編集] 関連項目

English 日本語 中文(简体) 中文(繁體)