[英]Why is the function prototype inside a different function block?
我試圖了解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()之前?
您編寫一個函數原型,以便編譯器知道該函數存在,並可以使用它。 swap()
在qsort()
,因此它必須出現在使用它的行之前。 在這種情況下, swap()
原型在qsort()
函數內聲明,但也可以在函數本身之前聲明。 或者你可以在qsort()
之前定義swap()
qsort()
並刪除原型。
應該在第一次使用實際功能之前添加原型。 在這種情況下,我認為在qsort()
函數中使用原型並不是一般的做法,但是,它仍然可以達到目的。 swap()
的原型也可以在main()
之前添加,不要認為它會產生影響。
將函數原型放置在其他函數的定義中通過限制對原型出現的函數的正確函數調用來強制執行最小特權原則。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.