Foro de elhacker.net

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:

Código
  1. /* qsort: c la sific a v[left].. ,v[right] e n o rd e n a s c e n d e n te */
  2. void qsort(void *v[ ], int left, int right,
  3. int (*com p) (void *, void *))
  4. {
  5. int i, last;
  6. void sw ap(void *v[ ], int, int);
  7. if (left > = right)
  8. /* n o h a c e n ad a si el arre g lo co n tien e */
  9. re tu m ;
  10. /* m enos d e dos elem entos */
  11. sw ap(v, left, (left + right)/2);
  12. last = left;
  13. for (i = le ft+ 1 ; i < = right; i + + )
  14. if ((‘ com p) (v[i], v[left]) < 0)
  15. sw ap(v, + + la st, i);
  16. sw ap(v, left, last);
  17. qsort(v, left, la st—1, com p);
  18. qsort(v, last + 1, right, com p);
  19. }

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!!