У меня проблемы с компиляцией примера программы, представленной в разделе 5.11 книги. Я удалил большую часть кода и оставил только соответствующие материалы.
#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) {
/* ... */
}
Проблема в том, что код не компилируется (я использую компилятор Digital Mars). Я получаю следующую ошибку:
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
Должно быть, что-то не так с объявлениями, хотя я правильно вставил код из книги. Я не знаю достаточно, чтобы сделать правильные изменения (раздел об указателях функций, безусловно, мог бы быть написан более подробно).
РЕДАКТИРОВАТЬ: я должен был упомянуть, что я читаю ANSI-версию книги.