C 为什么功能原型在不同的功能块中?
通过K&R,我试图理解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]&
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()
之前。