Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: codX en 25 Diciembre 2019, 16:53 PM

Título: Entendiendo una función
Publicado por: codX en 25 Diciembre 2019, 16:53 PM
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.
Título: Re: Entendiendo una función
Publicado por: MAFUS en 26 Diciembre 2019, 02:57 AM
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.
Título: Re: Entendiendo una función
Publicado por: codX en 26 Diciembre 2019, 16:53 PM
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!!