我有这个功能:
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
非常感谢。
答案 0 :(得分: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;
}
答案 1 :(得分:1)
如果emptyHeapArray(h)
返回true,则不返回任何内容。然后控件到达非空函数firstHeapArray
的末尾。
答案 2 :(得分:1)
编译器推断,当if
测试失败时,如果可以执行,则没有return语句。
答案 3 :(得分:1)
如果firstHeapArray
,emptyHeapArray(h) == true
确实不会返回。
这是未定义的行为,这意味着任何事情都可能发生,很可能是当堆为空时使用此函数的任何人都可能会收到一个随机值。
您可以处理此案例,返回成功标志:
bool firstHeapArray (IntHeapArray h, int * out_value) {
if(!emptyHeapArray(h))
{
*value = h.array[0];
return true; //success
}
return false;
}
答案 4 :(得分:0)
在任何一种情况下,此函数都必须返回值:
int firstHeapArray (IntHeapArray h) {
if(!emptyHeapArray(h))
return h.array[0];
return 0;
}
在您的示例中,仅在满足某些条件时才返回值。