return statement
現在の関数を終了し、指定された値を呼び出し元関数に返します。
目次 |
構文
attr-spec-seq
(オプション)
return
expression
;
|
(1) | ||||||||
attr-spec-seq
(オプション)
return
;
|
(2) | ||||||||
| expression | - | 関数の戻り値の初期化に使用される式 |
| attr-spec-seq | - |
(C23)
オプションの
属性
リスト、
return
文に適用される
|
説明
式の型が関数の戻り値の型と異なる場合、その値は関数の戻り値の型を持つオブジェクトへの代入によって 変換 されます。ただし、オブジェクト表現の重複は許可されます:
struct s { double i; } f(void); // 構造体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; // 未定義動作(代入時のオーバーラップ) g.u2.f3 = f(); // 適切に定義された動作 }
戻り値の型が実浮動小数点型の場合、結果は新しい型で暗示される範囲と精度よりも 広い範囲と高い精度 で表現される可能性があります。
voidを返す関数の終端に到達することは、
void
を返すことに相当します。
return
;
。その他の値を返す関数の終端に到達することは、関数の結果が式で使用される場合、未定義動作となります(このような戻り値を破棄することは許可されています)。
main
関数については、
main
function
を参照してください。
|
no-return関数
内で
|
(C11以降) |
キーワード
例
|
このセクションは不完全です
理由:改善が必要 |
#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); // 戻り値4がiの初期化に使用される i = fb(i); // 戻り値2が代入の右辺値として使用される 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++ ドキュメント
for
return
文
|