hay ventajas en hacer este tipo de declaraciones ?
static int
compare (const void *a, const void *b)
{
return strcmp (*(char **) a, *(char **) b);
}
Cita de: elProfeta1979 en 20 Diciembre 2013, 21:12 PMhay ventajas en hacer este tipo de declaraciones?
Primero tienes que indicar
en relación a que.
Para dar mas contexto una función de ese tipo se utiliza junto con qsort (parte de la biblioteca estándar de C) para ordenar un array de punteros a carácter:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
static int cmp(void const *p, void const *q);
int main(void)
{
char *pal[] = {
"xyz",
"paco",
"luis",
"hugo",
"abc",
};
size_t num_pals = sizeof pal / sizeof pal[0];
size_t i;
qsort(pal, num_pals, sizeof pal[0], cmp);
for (i = 0; i < num_pals; i++)
printf("%lu: %s\n", (unsigned long) i, pal[i]);
return EXIT_SUCCESS;
}
static int cmp(void const *p, void const *q)
{
return strcmp(*(char **) p, *(char **) q);
}
Un saludo
por eso mismo, mi pregunta es: ¿sí es una función donde siempre se le pasan cadenas de caracteres para que poner punteros genéricos y luego hacer el cast?
preguntaba si hay alguna ventaja o si, en este caso es lo mismo hacer la función así:
static int
compare (const char *a, const char *b);
con punteros a char
saludos
------------
Cita de: elProfeta1979 en 21 Diciembre 2013, 18:36 PMmi pregunta es: ¿sí es una función donde siempre se le pasan cadenas de caracteres para que poner punteros genéricos
Porque la función sera llamada por qsort, su prototipo es:
qsort(void *elem, size_t num_elem, size_t elem_size, int (*cmp)(void const *pa, void const *pb))
Con el se indica que el cuarto argumento sera un puntero a función cuyo tipo de retorno es int y sus dos argumentos de tipo "void *", esto para que la función sea genérica ya que no puede saber de antemano el tipo del array a ordenar.
Un saludo
gracias
:o