return 语句
来自cppreference.com
终止当前函数并返回指定值给调用方函数。
语法
属性说明符序列(可选) return 表达式 ;
|
(1) | ||||||||
属性说明符序列(可选) return ;
|
(2) | ||||||||
| 表达式 | - | 用于初始化函数返回值的表达式 |
| 属性说明符序列 | - | (C23)可选的属性列表,应用到 return 语句
|
解释
1) 求值 表达式,终止当前函数,并返回 表达式 的结果给调用方(该返回值成为函数调用表达式的值)。仅对函数返回类型非
void 的情形合法。2) 终止当前函数。仅对函数返回类型为
void 的情形合法。若 表达式 的类型与函数的返回类型不同,则如同赋值给该函数返回类型的对象一般对其值进行转换,但容许对象表示间有所重叠:
struct s { double i; } f(void); // 函数返回 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; // 未定义行为(赋值中重叠)
g.u2.f3 = f(); // 良好定义
}
若返回类型是实浮点类型,则结果可能拥有比新类型所隐含者更大的范围和精度的表示。
抵达返回 void 的函数的末尾等价于 return;。若函数结果用于表达式,则抵达任何其他返回值的函数的结尾为未定义行为(允许舍弃这种返回值)。对于 main,见 main 函数。
|
在不返回函数中执行 |
(C11 起) |
关键词
示例
| 本节未完成 原因:改进 |
运行此代码
#include <stdio.h>
void fa(int i)
{
if (i == 2)
return;
printf("fa(): %d\n", i);
} // 隐含 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 The return statement (第 111-112 页)
- C11 标准(ISO/IEC 9899:2011):
- 6.8.6.4 The return statement (第 154 页)
- C99 标准(ISO/IEC 9899:1999):
- 6.8.6.4 The return statement (第 139 页)
- C89/C90 标准(ISO/IEC 9899:1990):
- 3.6.6.4 The return statement
参阅
return 语句的 C++ 文档 |