2011-02-17 20 views
8

estoy tratando de entender C, pasando a través de K & R. tengo problemas para entender este código para dos funciones que se encuentran en el libro:¿Por qué el prototipo de función está dentro de un bloque de función diferente?

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; 
} 

Estas dos funciones realizan una clasificación rápida en una matriz dada. En la función principal, creé una matriz int y llamé a qsort. Compiló bien y funcionó bien. Mi pregunta es, ¿por qué el prototipo para swap() pone en la función qsort() y no antes de main()?

+1

Se puede hacer de ambas formas. Supongo que esto se hace para poner el prototipo en un ámbito, no es que importe. –

Respuesta

5

El prototipo se debe agregar antes de que la función real se use por primera vez. En este caso, no creo que sea una práctica general tener un prototipo en la función qsort(), sin embargo, todavía cumple la función. El prototipo para swap() también se puede agregar antes de main(), no creo que haga la diferencia.

+2

Esto es incorrecto. El prototipo de 'swap()' no ** podría ** agregarse ** en 'main()', ya que debe declararse antes de usarse en 'qsort()'. Es un lugar extraño para poner el prototipo, pero el único otro lugar donde podría colocarse legalmente sería antes de 'swap()'. –

+0

@Bradley - Edité mi respuesta. –

5

Usted escribe un prototipo de función para que el compilador sepa que existe una función, y puede usarla. swap() se usa dentro de qsort(), por lo que debe aparecer antes de la línea en que se usa. En este caso, el prototipo swap() se declara dentro de la función qsort(), pero también podría declararse antes de la función en sí. O puede definir swap() antes de qsort() y eliminar el prototipo.

Cuestiones relacionadas