c - 如果我们在 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 语句会怎样?
解决方案
参见C11 草案标准中的6.9.1(函数定义)/12 (相同的语言出现在 C99 中):
- 如果
}
到达终止函数的 ,并且调用者使用函数调用的值,则行为未定义。
(在 C90 中,6.6.6.4(return
声明)中大部分是等效的语言:
如果
return
执行了没有表达式的语句,并且调用者使用了函数调用的值,则行为未定义。到达}
终止函数的方法等同于执行return
没有表达式的语句。
不同之处在于(从 C99 开始)return;
在非 void 函数中没有表达式是错误的。)
在您的情况下,达到}
of sum
(未return
执行任何语句)并使用返回值:
res=sum(1,2);
因此,您的代码具有未定义的行为:任何事情都可能发生,从垃圾值res
到无限循环或崩溃。
推荐阅读
- android - Android Studio 3.1.3 Gradle build error : Transformation exception and Conflicts found in the installation area
- python - Python - Geotext - 无法识别“里约热内卢”等城市
- excel - Excel中的图例键位置
- arrays - 删除包含特定键 JSON 的对象
- scala - 三个列表与猫的笛卡尔积
- android - 有没有办法从应用程序组件 dagger2 访问贡献模块实例
- macos - 如何永久更新 npm?
- php - 如果已经使用 php 准备语句从数据库中选择用户名和电子邮件
- android - 嵌套的 RecyclerViews:当 RecyclerView 正在计算布局或滚动时,无法调用 notifyDataSetChanged() 方法
- firebase - Firebase 函数部署失败并显示访问被拒绝