这是一个递归函数,可将二进制数(以整数数组形式给出)转换为小数。
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/