不在void函数中写return语句占用堆栈内存吗?

时间:2016-10-02 18:51:23

标签: c recursion stack quicksort void

这是quicksort算法的简单递归函数,我在这个函数中找不到return语句,所以在最后一次递归后它不会清空堆栈吗?

void quicksort(int arr[], int p, int r){
    int q = partition(arr, p, r);
    if(p < r){
        quicksort(arr,p, q-1);
        quicksort(arr,q+1, r);
    }
}

这个函数没有返回statemnt,所以递归函数会永久保留在堆栈上还是会被清空?

3 个答案:

答案 0 :(得分:4)

当函数最终退出时,该函数的堆栈帧被清除

没有必要使用明确的return语句;当程序流遇到关闭括号时,函数将无论如何都会退出,并且它的堆栈帧将被清除。

函数可以在没有return的情况下退出的另一种典型方式(尽管不在C中)是抛出异常;再次,堆栈帧将被清除。

答案 1 :(得分:1)

通常,只有在您希望在到达函数体的末尾之前返回的情况下,return函数中的void语句才是必需的。最后一行return语句是多余的,可以忽略。使用或不使用return清除堆栈。

答案 2 :(得分:0)

  

此函数没有返回statemnt,因此递归函数也是如此   永远留在堆栈上还是会被清空?

在void函数的情况下,当代码结束时,它结束。这里,当p> = r时,void函数将结束。堆叠框架结束时应移除。 代码末尾的最后一个结束大括号'}'是一个隐式的返回语句,因此不需要返回。

对于void函数,最后不需要显式的'return'。但是,如果在到达函数/代码结束之前它应该在某些条件下先退出,则可以在void函数中使用'return'。如果你想避免在函数结束时作为编码指南/练习的模糊性,你也可以在void函数结束时使用'return'。