C语言 函数名相同的两个函数合法吗?

在快速排序算法中遇到的问题:QuickSort的递归函数和主调用函数名称相同,我自己调试是报错的

书上的代码是这样的:

// Partition是判断分割元素下标的函数
int Partition(List* list, int low, int high)
{
    int i =low,j = high + 1;
    Entry pivot = list ->D[low];                //pivot是分割元素
    do
    {
        do i++;        while(i<=high && list->D[i].key < pivot.key);    //i前进
        do j--;        while(list->D[j].key>pivot.key);        //j前进
        if(i < j )    Swap(list->D,i ,j );
    }while(i < j);
    Swap(list->D,low, j);
    return j;                                    //此时j是分割元素下标
}
//快速排序算法
void QuickSort(List *list, int low, int high)    //快速排序的递归函数
{
    int k;
    if(low < high)                                //当前待排序序列至少包含两个元素
    {
        k = Partition(list, low ,high);
        QuickSort(list, low, k-1);
        QuickSort(list, k+1, high);
    }
}

void QuickSort(List *list)                        //快速排序算法的主调用函数
{
    QuickSort(list, 0 ,list->n-1);
}

C语言不合法,C++合法

报什么错呢?参数不同就可以

函数名相同会报错的

多态、、重载都是学C++时遇到的,我也是老和C搞混。不过一般都用C++写实现,最后一步才导出为C的库。