Tengo problemas para compilar el programa de ejemplo presentado en la sección 5.11 del libro. He eliminado la mayor parte del código y solo dejé las cosas relevantes.Compilación de problemas Ejemplo K & R
#define MAXLINES 5000
char *lineptr[MAXLINES];
void qsort1(void *lineptr[], int left, int right, int (*comp)(void *, void *));
int numcmp(char *, char *);
main(int argc, char *argv[]) {
int numeric = 1;
/* ... */
qsort1((void**) lineptr, 0, 100, (int (*)(void*, void*))(numeric ? numcmp : strcmp));
}
void qsort1(void *v[], int left, int right, int (*comp)(void *, void *)) {
/* ... */
}
int numcmp(char *s1, char *s2) {
/* ... */
}
El problema es que el código no se compila (estoy usando el compilador Digital Mars). El error que consigo es la siguiente:
qsort1((void**) lineptr, 0, nlines - 1, (int (*)(void*, void*))(numeric
? numcmp : strcmp));
^
go.c(19) : Error: need explicit cast to convert
from: int (*C func)(char const *,char const *)
to : int (*C func)(char *,char *)
--- errorlevel 1
Debe haber algo mal con las declaraciones aunque me pega el código del libro correctamente. No sé lo suficiente como para hacer los cambios correctos (la sección sobre los punteros a las funciones podría haber sido escrita de forma más extensa).
EDIT: Debería haber mencionado que estoy leyendo la versión ANSI del libro.
son que compilar como un programa C o C++ programa –
que podía imaginar que el viejo código de K & R no sabía const. intente definir su función como int numcmp (char const * s1, char const * s2) {} –
@litb: esto parece haber funcionado. – Ree