控制到达非void函数的结尾(仅在特定的IDE上)

时间:2016-08-08 15:43:34

标签: c++ if-statement gcc-warning

int findpow(int n1,int k, int count){ //while calling, k=1, count=0
    if(k<n1)
        return findpow(n1,k*2,count+1);
    if(k==n1)
        return count;
    if(k>n1)
        return --count;
}

这是一个返回小于 n 的最大2的幂的函数。当我在我的ubuntu终端(g ++ 4.8.4)中运行它时,它运行正常。但是当我在www.hackerrank.com上运行它时,它会给出一个错误(控制达到非空函数的结束)。问题是,我参加了这个网站上的很多比赛,我多次遇到过这个问题。

请告诉您是否知道如何解决问题。

2 个答案:

答案 0 :(得分:4)

您可以像这样使用else if语句:

int findpow(int n1,int k, int count){ //while calling, k=1, count=0
    if(k<n1)
        return findpow(n1,k*2,count+1);
    else if(k==n1)
        return count;
    else // Eliminate compiler errors (warnings)
        return --count;
}

或如@juanchopanza所说:

int findpow(int n1,int k, int count){ //while calling, k=1, count=0
    if(k<n1)
        return findpow(n1,k*2,count+1);

    if(k==n1)
        return count;

    // Eliminate compiler errors (warnings)
    return --count;
}

它将与您的代码做同样的事情,但不会对编译器产生怀疑,因为编译器不能从函数返回。

答案 1 :(得分:1)

&#39;控制到达无效功能的结束&#39;警告不是错误,在这种情况下可以安全地忽略,但如果你想抑制警告,有多种方法:

  • 在最后一个条件之后退货
  • 正如Mykola建议重组条件要明确
  • 设置-Wno-return-type标志