c++ - 控制到达非空函数的末尾(仅在特定的 IDE 上)

标签 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的二的最大幂。当我在我的 ubuntu 终端 (g++ 4.8.4) 中运行它时,它工作正常。但是当我在 www.hackerrank.com 上运行它时,它给出了一个错误(control reaches end of non void function)。问题是,我参加了这个网站上的许多比赛,并且多次遇到这个问题。

如果您知道我该如何解决,请告诉我。

最佳答案

您可以像这样使用 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;
}

它会做与您的代码相同的事情,但不会让编译器怀疑函数没有返回点。

关于c++ - 控制到达非空函数的末尾(仅在特定的 IDE 上),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38833462/

相关文章:

C++ - 没有获得控制台的预期输出

c++ - 用 dup 管道传输后如何取回标准输出?

C++获得最高考试成绩并使用指针

c++ - 如何避免 QNetworkRequest 将 RHELP 动词发送到 FTP 服务器?

c - Wunused-but-set-variable警告处理

c++ - 如何使用 `--wrap` 选项正确包装函数?

c - GCC 在初始化程序周围缺少大括号

java - 测试字符串以创建有效密码

php case语句根据变量的值继续或中断

java - 字符串数组到多个对象