C 为什么功能原型在不同的功能块中?

C 为什么功能原型在不同的功能块中?,c,prototype,C,Prototype,通过K&R,我试图理解C。我很难理解书中两个函数的代码: 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]&

通过K&R,我试图理解C。我很难理解书中两个函数的代码:

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;
}
void qsort(int v[],int左,int右){
int i,最后;
无效掉期(整数v[],整数i,整数j);
如果(左>=右)
返回;
交换(v,左,(左+右)/2);
最后=左;

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

应在实际函数首次使用之前添加原型。
在这种情况下,我不认为在
qsort()
函数中使用原型是一种普遍的做法,但是,它仍然可以达到这个目的。
swap()
的原型也可以添加到
main()之前
也一样,不要认为这会有什么不同。

将函数原型放在其他函数的定义中会强制执行
通过将适当的函数调用限制到原型出现的函数来获得最低权限。

这两种方法都可以做到。我认为这样做是为了将原型放在一个范围内,而不是因为它很重要。这是不正确的。
swap()
的原型无法添加到
main()中
,因为它在
qsort()
中使用之前必须声明。放置原型是一个奇怪的地方,但它唯一可以合法放置的地方是
swap()
之前。