当函数没有明确 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; 
 }

选项:

  1. '++++2'(根据答案的正确选项)
  2. '+++++2'
  3. '+++++'
  4. '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一致。