当函数没有明确 return 一个值时会发生什么?想不通代码的输出是怎么来的
what happens when function doesnt explicitly return a value? can't figure out how the output of the code is coming
我在测试系列中遇到了一个问题,当我根据我的 C 编程知识手动解决该问题时,应该给出与给定的任何选项都不匹配的输出。
我的输出='++++'
问题:下面c程序的输出是?
#include <stdio.h>
int f(int x)
{
if(x==2){ return 2; }
else{ printf("+"); f(x-1); }
}
int main()
{
int n = f(6);
printf("%d",n);
return 0;
}
选项:
- '++++2'(根据答案的正确选项)
- '+++++2'
- '+++++'
- '2'
我的逻辑: 因为最后 f(6) 没有明确 return 任何东西 [只有 f(2) return 是值2 到 f(3)],由于每次调用 f(6)、f(5)、f(4) 和 f(3),输出应仅包含 4 次“+”。
下面是一些测试代码和它们的输出截图,我在在线 C 编译器上试过 - 'codechef' 和 'onlinegdb' - 但我也无法理解它们的输出。请帮忙!
codechef
onlinegdb 1
onlinegdb 2
如果一个函数被定义为 return 一个值但它没有,那么尝试使用 returned 值会导致 undefined behavior.
这在 C standard 的第 6.9.1p12 节中有记录:
If the }
that terminates a function is reached, and the value of the function call is used by the caller, the behavior is undefined.
这基本上意味着结果不可预测and/or一致。
我在测试系列中遇到了一个问题,当我根据我的 C 编程知识手动解决该问题时,应该给出与给定的任何选项都不匹配的输出。
我的输出='++++'
问题:下面c程序的输出是?
#include <stdio.h>
int f(int x)
{
if(x==2){ return 2; }
else{ printf("+"); f(x-1); }
}
int main()
{
int n = f(6);
printf("%d",n);
return 0;
}
选项:
- '++++2'(根据答案的正确选项)
- '+++++2'
- '+++++'
- '2'
我的逻辑: 因为最后 f(6) 没有明确 return 任何东西 [只有 f(2) return 是值2 到 f(3)],由于每次调用 f(6)、f(5)、f(4) 和 f(3),输出应仅包含 4 次“+”。
下面是一些测试代码和它们的输出截图,我在在线 C 编译器上试过 - 'codechef' 和 'onlinegdb' - 但我也无法理解它们的输出。请帮忙!
codechef
onlinegdb 1
onlinegdb 2
如果一个函数被定义为 return 一个值但它没有,那么尝试使用 returned 值会导致 undefined behavior.
这在 C standard 的第 6.9.1p12 节中有记录:
If the
}
that terminates a function is reached, and the value of the function call is used by the caller, the behavior is undefined.
这基本上意味着结果不可预测and/or一致。