我在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中得到了正确的答案并没有发出警告。
你需要从每一个分支返回一个值。如果你不这样做,这是未定义的行为。 – chris
你得到正确的结果只是因为你有幸在你的函数中没有任何事发生在两个'search'调用修改后的EAX之后。所以它们的返回值可能仍然只是坐在EAX寄存器中。这是UB。正确指定所有返回路径。 – WhozCraig