命名空间
变体
操作

return 语句

来自 cppreference.com
< c‎ | 语言

终止当前函数并返回指定的值给调用函数。

内容

[编辑] 语法

attr-spec-seq(可选) return expression ; (1)
attr-spec-seq(可选) return ; (2)
expression - 用于初始化函数返回值的表达式
attr-spec-seq - (C23)可选的 属性 列表,应用于 return 语句

[编辑] 解释

1) 评估 expression,终止当前函数并返回 expression 的结果给调用者(返回的值成为函数调用表达式的值)。 仅当函数返回类型不是 void 时才有效。
2) 终止当前函数。 仅当函数返回类型是 void 时才有效。

如果 expression 的类型与函数的返回类型不同,则它的值将被 转换,就像通过赋值给类型为函数返回类型的对象一样,除了允许对象表示之间的重叠。

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 语句