【发布时间】:2019-04-24 08:21:46
【问题描述】:
我想知道下面程序的输出。主要关心的是当我们在调用函数中不使用 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 语句会怎样?
【问题讨论】:
-
这是未定义的行为。对我来说,它打印
1。任何事情都可能发生,并且没有任何保证。可能发生的情况是它只是在堆栈上取了一些随机的垃圾值。 -
我们不经常运行此类程序,因为我们在编译器中使用了高警告设置。
-
揭示了问题,并立即告诉程序员(他们没有有意地忽略编译器发出的警告)代码中的问题区域究竟在哪里,应该在继续进行之前修复。
-
@n.m.或者,也许我们被教导如何通过阅读 K&R 书来创建未定义的行为,第一个代码示例:
main() { printf("hello, world\n"); }。这是从 C90 编写的,所以没有隐式返回 0... -
@n.m.不,现在很特别。这不是写 K&R 的时候。我们必须假设调用者(OS)可能使用程序的返回码。
标签: c return-value