当我们在C语言的调用函数中不使用return语句时会发生什么?

use*_*811 1 c return-value

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

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

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

在上述功能中sum(),如果我使用return x+y; 它将打印3作为输出?

如果我不使用return语句怎么办?

mel*_*ene 5

请参阅C11标准草案 6.9.1(功能定义)/ 12 (C99中出现相同的语言):

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

(在C90中,6.6.6.4(return声明)中的语言几乎是等效的:

如果执行了return不带表达式的语句,并且调用者使用了函数调用的值,则该行为是不确定的。到达}终止函数的等同于执行return不带表达式的语句。

区别在于(从C99开始)return;在非void函数中不具有表达式是错误。)

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

res=sum(1,2);
Run Code Online (Sandbox Code Playgroud)

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