首页 > 解决方案 > 如果我们在 C 中的调用函数中不使用 return 语句会发生什么?

问题描述

我想知道以下程序的输出。主要关心的是当我们不在调用函数中使用 return 语句时会发生什么?

int sum(int x, int y)
{
    //return x+y; 
}

int main()
{
    int res=0;
    res=sum(1,2);
    printf("res = %d\n",res);
}

在上面的函数sum()中,如果我使用return x+y;它会打印 3 作为输出?

如果我不使用 return 语句会怎样?

标签: creturn-value

解决方案


参见C11 草案标准中的6.9.1(函数定义)/12 (相同的语言出现在 C99 中):

  1. 如果}到达终止函数的 ,并且调用者使用函数调用的值,则行为未定义。

(在 C90 中,6.6.6.4(return声明)中大部分是等效的语言:

如果return执行了没有表达式的语句,并且调用者使用了函数调用的值,则行为未定义。到达}终止函数的方法等同于执行return没有表达式的语句。

不同之处在于(从 C99 开始)return;在非 void 函数中没有表达式是错误的。)

在您的情况下,达到}of sum(未return执行任何语句)并使用返回值:

res=sum(1,2);

因此,您的代码具有未定义的行为:任何事情都可能发生,从垃圾值res到无限循环或崩溃。


推荐阅读