我想知道以下程序的输出。主要问题是当我们在调用函数中不使用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语句怎么办?
请参阅C11标准草案中的 6.9.1(功能定义)/ 12 (C99中出现相同的语言):
- 如果达到
}了终止函数的,并且调用者使用了函数调用的值,则行为是不确定的。
(在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到无限循环或崩溃。