1

我有这个功能:

int firstHeapArray (IntHeapArray h) {
    if(!emptyHeapArray(h))
        return h.array[0];
}

它被声明为 int,这是 IntHeapArray 结构:

typedef struct intHeapArray {
    int *array;
    int size;
} IntHeapArray;

你能说为什么我在编译时收到这个警告吗?

heap-test.c: In function ‘firstHeapArray’:
heap.h:31:1: warning: control reaches end of non-void function

非常感谢你。

4

5 回答 5

5

错误消息表明您有一个不是void返回的方法,但是您到达终点但没有返回值。您需要返回一个有效的 int 值。

问题在这里:

int firstHeapArray (IntHeapArray h) {
    if(!emptyHeapArray(h))
        return h.array[0];

    // If emptyHeapArray(h) is true, you reach here...

   // You need to return SOMETHING here to remove the warning
   return 0;
}
于 2012-06-09T20:58:39.100 回答
1

如果emptyHeapArray(h)返回 true,则不返回任何内容。然后控制到达非空函数的末尾firstHeapArray

于 2012-06-09T20:58:11.490 回答
1

编译器推断,当if测试失败时,如果可以执行,则没有 return 语句。

于 2012-06-09T20:58:21.413 回答
1

如果确实firstHeapArray不返回emptyHeapArray(h) == true

这是未定义的行为,这意味着任何事情都可能发生,很可能在堆为空时使用此函数的任何人都可能会收到一个随机值。

您可以处理这种情况,返回成功标志:

bool firstHeapArray (IntHeapArray h, int * out_value) {
   if(!emptyHeapArray(h))
   {
       *value = h.array[0];
       return true; //success
   }
   return false;
}
于 2012-06-09T21:18:30.600 回答
0

无论哪种情况,此函数都必须返回值:

int firstHeapArray (IntHeapArray h) {
    if(!emptyHeapArray(h))
        return h.array[0];

    return 0;
}

在您的示例中,它仅在满足某些条件时才返回值。

于 2012-06-09T20:59:00.770 回答