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

10 c prototype

我试图了解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;
}
Run Code Online (Sandbox Code Playgroud)

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

Jul*_*ano 5

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


Sac*_*hag 5

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

  • 这是不正确的.`swap()`的原型不能在`main()`中添加,因为它必须在`qsort()`中使用之前声明.放置原型是一个奇怪的地方,但它可以合法放置的唯一其他地方是`swap()`之前. (2认同)