【问题标题】:Unreachable statement in cc中无法访问的语句
【发布时间】:2015-12-24 12:39:28
【问题描述】:

我现在正在学习 C 编程语言并尝试理解其中的功能。 下面的代码在 Visual Studio 中没有给出错误,并返回发送给该函数的第一个参数。 我认为它应该给出一个错误,但它没有。

给定的代码如何工作以及如何返回代码中的第一个参数 3?

#include <stdio.h>
#include <stdlib.h>


int hesapla(int x, int y);
void f();
int main()
{
int a, b, sonuyc; 
int s; 
printf("\n");

printf("sonuc = %d", hesapla(3, 10));
system("pause");
return 0;
}
int hesapla( int x, int y) {

    if (x > y )

        return y; 


    if (x == y)

        return y + 1;  

}

谢谢你..

【问题讨论】:

  • I think it should give an error but it does not....为什么会这样?
  • x &lt; y时返回值未确定。
  • 你的函数永远不会返回x。你需要添加一个条件来做到这一点。
  • 我认为这是未定义的行为。不需要错误消息。如果不正确使用return,编译器无法始终确定是否存在导致函数脱落的可能代码路径。
  • 当我们向函数发送大于第二个参数的第一个参数时,函数中的 if 条件将不成立,因此 return 语句将无法访问,因为我认为它应该给出错误。如何决定在那种情况下返回哪个值?

标签: c function return-value


【解决方案1】:

您的函数 hesalphareturn 时不会发生任何事情 x &lt; y ,因此,它表现出未定义的行为

您可以使用 if else 或仅使用 return 值作为 默认值(当前面的两个条件均为 false 时)来处理这种情况

【讨论】:

    【解决方案2】:

    Toy 需要确保所有路径都明确地返回一个值,否则你会得到任何发生在用于从非确定性函数返回值的寄存器中的任何内容。

    int hesapla( int x, int y) 
    {
        if (x > y )
            return y; 
    
        if (x == y)
            return y + 1;  
    
        return x ;
    }
    

    虽然当你的代码变得更复杂时,为了你自己的理智,为了完全避免这个问题,我建议:

    int hesapla( int x, int y) 
    { 
        int ret = x ;
    
        if (x > y )
        {
            ret = y; 
        }
        else if(x == y)
        {
            ret = y + 1;  
        }
    
        return ret ;
    }
    

    对于像这样的简单函数,可以在单个表达式中返回结果:

    int hesapla( int x, int y) 
    { 
        return (x > y) ? y : (x == y) ? y + 1 : x ;
    }
    

    也许简洁,但我不确定我是否会推荐它。

    【讨论】:

      【解决方案3】:

      if 语句都不为真,因此hesapla () 将返回0,这是int 函数的默认返回值。

      目前还不清楚你到底想做什么,但也许你在追求这个?

      int
      hesapla (int x, int y)
      {
          if (x == y) {
              return y + 1;
          }
      
          if (x > y) {
              return y;
          }
      
          return x;
      }
      

      不过,这样更好……

      int
      hesapla (int x, int y)
      {
          if (x == y) {
              return x + 1;
          }
      
          return min (x, y);
      }
      

      【讨论】:

        猜你喜欢
        • 2021-05-04
        • 2016-03-03
        • 2018-06-06
        • 1970-01-01
        • 2017-04-29
        • 1970-01-01
        • 2015-11-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多