首页 > 解决方案 > 当函数没有显式返回值时会发生什么?无法弄清楚代码的输出是如何来的

问题描述

我在一个测试系列中遇到了一个问题,当我根据我对 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'(正确选项acc to answer key)
  2. '+++++2'
  3. '+++++'
  4. '2'

我的逻辑:因为最后 f(6) 没有显式返回任何内容[只有 f(2) 将值 2 返回到 f(3)],因此输出应该只包含 4 次“+”,因为每次调用 f (6)、f(5)、f(4) 和 f(3)。

下面是我在在线 c 编译器上尝试过的一些测试代码和它们的输出截图——“codechef”和“onlinegdb”——但我也无法理解它们的输出。请帮忙!

编解码器

编解码器

在线gdb 1

在线gdb 1

在线gdb 2

在线gdb 2

标签: crecursionreturn-valuecall

解决方案


如果一个函数被定义为返回一个值而它没有,那么尝试使用返回的值会导致未定义的行为

这记录在C 标准的第 6.9.1p12 节中:

如果}到达终止函数的 ,并且调用者使用函数调用的值,则行为未定义。

这基本上意味着结果是不可预测的和/或一致的。


推荐阅读