我在编译本书第 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) {
/* ... */
}
问题是代码无法编译(我正在使用数字火星编译器)。我得到的错误是这样的:
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 版本。