"Control may reach end of non-void function"警告
Warning of "Control may reach end of non-void function"
我在 Xcode 中运行了一个C++程序,遇到了"控制可能达到非无效函数的末尾"的警告。这是代码:
Node* search(Node* head, int x)
{
if(!head)
return NULL;
else if(x == head->key)
return head;
else if(x < head->key)
search(head->lchild, x);
else
search(head->rchild, x);
}
在 Linux 中编译时,我收到了相同的警告,但得到了正确的结果。但在Xcode中,结果是错误的。顺便说一下,我在Visual Studio中得到了正确的答案,没有任何警告。
我认为你的意思是返回递归调用的结果:
Node* search(Node* head, int x)
{
if(!head)
return NULL;
else if(x == head->key)
return head;
else if(x < head->key)
return search(head->lchild, x);
else
return search(head->rchild, x);
}
你的函数现在允许你在没有显式返回的情况下从函数的末尾流出,这是未定义的行为,草案标准部分6.6.3
return 语句说;
[...]从函数末尾流出等效于没有值的返回;这会导致值返回函数中出现未定义的行为。[...]
最后两个没有 return 语句:
else if(x < head->key)
search(head->lchild, x); // No return
else
search(head->rchild, x); // No return
// no return
}
因此,在这些情况下,您将在不返回值的情况下从末尾流出,从而调用未定义的行为,似乎您可能打算返回,但只是将它们排除在外,真正意味着:
else if(x < head->key)
return search(head->lchild, x);
else
return search(head->rchild, x);
else if(x < head->key)
search(head->lchild, x);
else
search(head->rchild, x);
在这些分支中,您将:
- 递归调用
search
- 丢弃它返回的值
- 不返回任何内容
不从函数返回值是未定义的行为。您获得正确结果的事实纯粹是偶然的,不能依赖,编译器很可能会选择格式化您的硬盘驱动器或订购披萨。
通过添加return
语句来解决此问题:
else if(x < head->key)
return search(head->lchild, x);
else
return search(head->rchild, x);
相关文章:
- "Warning : No return statement in function returning non-void"是什么意思?
- 抑制非平凡无用的警告"control may reach end of non-void function"
- "Control reaches end on non-void function" with do { return result; } while(condition);
- 我在C++年写了一个findClosestPrime(),但Xcode抱怨"Control may reach end of non-void function"
- 如何修复空虚拟方法的"warning: no return statement in function returning non-void [-Wreturn-type]"
- 收到此警告" Control may reach end of non-void function "
- 即使我已经涵盖了所有情况,也会收到"control reaches end of non-void function"警告
- 布尔函数"Control reaches end of non-void function"错误
- 困惑为什么"control may reach end of non-void function"
- 当调用带有警告"control reaches end of non-void function"的函数时,(实际上)会发生什么?
- "Control may reach end of non-void function"警告
- 为什么'control reaches end of non-void function'只是一个警告?合法吗?
- 错误:在 c++ 中"Control may reach end of non-void function"
- "control reaches end of non-void function",通过枚举类型进行完全处理的案例切换
- 错误:"control may reach end of non-void function"
- c++函数(错误:control may reach end of non - void function)
- "control reaches end of non-void function" Eclipse C++ 中的警告,但没有编译或运行时错误
- 抛出异常并忽略"reaches end of non-void function"警告不好吗?
- if-else 块引发"control reaches end of non-void function"警告
- 看不到"control reaches end of non-void function [-Wreturn-type]"的原因