Entendiendo una función

Iniciado por codX, 25 Diciembre 2019, 16:53 PM

0 Miembros y 1 Visitante están viendo este tema.

codX

Hola amigos del foro. Estoy estudiando el archiconocido libro EL Lenguaje de Programción C de Kernighan y Ritchie; en la sección de apuntadores a funciones aparece el siguiente código:

/* qsort: c la sific a v[left].. ,v[right] e n o rd e n a s c e n d e n te */
void qsort(void *v[ ], int left, int right,
int (*com p) (void *, void *))
{
int i, last;
void sw ap(void *v[ ], int, int);
if (left > = right)
/* n o h a c e n ad a si el arre g lo co n tien e */
re tu m ;
/* m enos d e dos elem entos */
sw ap(v, left, (left + right)/2);
last = left;
for (i = le ft+ 1 ; i < = right; i + + )
if ((' com p) (v[i], v[left]) < 0)
sw ap(v, + + la st, i);
sw ap(v, left, last);
qsort(v, left, la st—1, com p);
qsort(v, last + 1, right, com p);
}


No entiendo por qué dentro de dicha función declara otra función de la siguiente manera(segunda línea dentro de la funcion:

void sw ap(void *v[ ], int, int);

Gracias.

MAFUS

Las funciones, al igual que las variables, deben ser conocidas por el compilador antes de ser usadas. Al igual que las variables, una función puede ser declarada en cualquier sitio: locales o globales. En este caso swap es local, es decir, sólo será vista dentro de qsort. Pero recordar que la definición de la función debe existir en otro lugar y el enlazador debe saber dónde encontrarla, es decir, lo único que cambia es que en vez de haber declarado la función global o por archivo de cabecera lo ha hecho local de otra función.

codX

Mafus, cómo estás. Me ha servido mucho la explicación, clara, concisa. Es la primera vez que lo veo. Gracias por tu tiempo. Buen 2020!!