Почему прототип функции внутри другой функции?

Я пытаюсь понять 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;
}

эти две функции выполняют quicksort для данного массива. В основной функции я создал массив int и вызвал qsort. Он скомпилирован и работает нормально. Мой вопрос в том, почему прототип для swap() поместите в функцию qsort (), а не перед main ()?

2 ответов


прототип должен быть добавлен до того, как фактическая функция будет использована в первый раз. В этом случае я не думаю, что это общая практика иметь прототип в qsort() функция, однако, она все еще служит цели. Прототип для swap() также можно добавить перед main() тоже не думаю, что это будет сделать разницу.


вы пишете прототип функции, чтобы компилятор знал, что функция существует, и мог ее использовать. swap() используется внутри qsort(), поэтому он должен отображаться перед используемой строкой. В этом случае swap() прототип объявляется внутри qsort() функция, но она также может быть объявлена перед самой функцией. Или вы можете определить swap() до qsort() и удалить прототип.