【问题标题】:I get a warning for a function and I do not know how to write the function so I won't get that warning anymore我收到一个函数警告,但我不知道如何编写函数,所以我不会再收到那个警告
【发布时间】:2017-08-20 03:24:47
【问题描述】:

这是基于该节点的id 在树中简单搜索节点的代码:

NodeT *searchNode(NodeT *parent, int id)
{
    if(parent == NULL) printf("\nThere is no tree.");
    if(parent->id == id)
        return parent;
    else
    {
        if(parent->left != NULL) searchNode(parent->left, id);
        if(parent->right != NULL) searchNode(parent->right, id);
    }
}

我也得到这个:警告:控制到达非空函数的结尾 [-Wreturn-type]|

节点定义如下:

typedef struct node_type
{
    char id;
    struct node_type *left, *right;
} NodeT;

有什么办法可以消除这个警告吗?

【问题讨论】:

  • 警告非常明确。如果parent->id != id,函数返回什么?函数必须总是返回一些东西,如果你声明它们这样做的话。
  • 谢谢,您的回答对我帮助很大。我发现如果我将if(parent->left != NULL) searchNode(parent->left, id); 替换为return searchNode(parent->left, id);,那么程序将正常运行而不会发出任何警告。下一行也是如此:if(parent->right != NULL) searchNode(parent->right, id);
  • @ISimion 如果你有一个左节点和一个右节点,但结果是在右节点中找到呢?您将从左侧返回结果,而不是查看右侧。

标签: c search tree warnings


【解决方案1】:

你的函数只在特定情况下返回一些东西。警告是告诉您在任何情况下都需要退货。对于您的代码 cos,这是一个非常重要的警告,因为它还突出显示了几个错误。

if(parent == NULL) printf("\nThere is no tree.");
if(parent->id == id)

如果parentNULL 会发生什么?它打印出错误消息,然后继续到下一行并会崩溃。您希望第一个 if 也有一个 return 语句,如果它是真的,这样代码就不会继续或将函数代码的其余部分放入 else 块中。

接下来,如果你的树中有多个节点会怎样?您遍历树,但忽略结果!如果你搜索一个不存在的节点,你也不会返回任何东西。

因此,如果找不到结果或将递归调用自身的结果返回给它,则应将代码更改为return NULL

【讨论】:

    猜你喜欢
    • 2012-02-21
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    • 2021-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-27
    相关资源
    最近更新 更多