c - 警告 : Control may reach end of non-void function

标签 c recursion

这是一个递归函数,可将二进制数(以整数数组形式给出)转换为小数。

double binaryToDecimalRecursive(int *binary, int len) {
    if (len == 0) 
        return *binary;
    if (len > 0) {
        return (binary[0]*pow(2, len))+binaryToDecimalRecursive(binary+1, len-1);
    }
}

GCC 编译器向我发出“控制可能到达非 void 函数末尾”警告。

我应该解决什么问题来防止这种情况发生?

最佳答案

从评论中看来,您已将代码更改为这样,对吗?

double binaryToDecimalRecursive(int *binary, int len) {
    if (len == 0) 
        return *binary;
    if (len > 0) {
        return (binary[0]*pow(2, len))+binaryToDecimalRecursive(binary+1, len-1);
    }
    if(len < 0) return -1;
}

编译器无法识别它总是遵循这些分支中的至少一个。您可以通过几种方式使其更加明确。这是一种可行的方法:

double binaryToDecimalRecursive(int *binary, int len) {
    if (len == 0) 
        return *binary;
    else if (len > 0) { // Added an `else` statement
        return (binary[0]*pow(2, len))+binaryToDecimalRecursive(binary+1, len-1);
    }
    else return -1; // Here too
}

关于c - 警告 : Control may reach end of non-void function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35444526/

相关文章:

c - 反转数字的递归函数

java - java中递归的澄清

javascript - 如何在使用编译而不是链接的指令中使用 Angular 中的矩库

c - OpenCV 使用 Xcode 时出现空指针错误

c - 可用于 gtk+ 开发的 IDE 有哪些

c - 在c中获得多个输入的最佳方法是什么?

c - 为什么这个 printf 语句没有产生书本示例中所示的输出?

c - 客户端连接时没有服务器证书和 "no shared cipher"

mysql - 使用 SQL 检索分层数据

programming-languages - 所有迭代算法都可以递归表达吗?