为什么函数原型在不同的function块中?

我试图了解C,通过K&R。 我无法理解本书中的两个函数的代码:

void qsort(int v[], int left, int right){ int i, last; void swap(int v[], int i, int j); if (left >= right) return; swap(v, left, (left+right)/2); last = left; for ( i = left+1; i<=right; i++) if (v[i]<v[left]) swap(v,++last, i); swap(v,left,last); qsort(v,left,last-1); qsort(v,last+1,right); } void swap(int v[], int i, int j){ int temp; temp = v[i]; v[i] = v[j]; v[j] = temp; } 

这两个函数对给定数组执行快速排序。 在main函数中,我创建了一个int数组并调用了qsort。 它编译得很好,运行良好。 我的问题是,为什么swap()的原型放在函数qsort()而不是main()之前?

应该在第一次使用实际function之前添加原型。 在这种情况下,我认为在qsort()函数中使用原型并不是一般的做法,但是,它仍然有用。 swap()的原型也可以在main()之前添加,不要认为它会有所作为。

您编写函数原型,以便编译器知道该函数存在,并可以使用它。 swap()qsort() ,因此它必须出现在使用它的行之前。 在这种情况下, swap()原型在qsort()函数内声明,但也可以在函数本身之前声明。 或者你可以在qsort()之前定义swap() qsort()并删除原型。