Tôi gặp sự cố khi biên dịch chương trình mẫu được trình bày trong phần 5.11 của cuốn sách. Tôi đã xóa hầu hết mã và chỉ để lại nội dung có liên quan.Sự cố khi biên dịch mẫu 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) {
/* ... */
}
Vấn đề là mã không biên dịch (Tôi đang sử dụng trình biên dịch sao Hỏa kỹ thuật số). Lỗi tôi nhận được là:
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
Có điều gì đó sai với khai báo mặc dù tôi đã dán mã từ sách chính xác. Tôi không biết đủ để thực hiện các thay đổi đúng (phần về các con trỏ hàm có thể được viết nhiều hơn).
EDIT: Tôi nên đề cập rằng tôi đang đọc phiên bản ANSI của cuốn sách.
là bạn biên soạn như một chương trình C hoặc C++ chương trình –
tôi có thể tưởng tượng rằng cũ K & R mã đã không biết const. thử xác định hàm của bạn là int numcmp (char const * s1, char const * s2) {} –
@ litb: điều này dường như đã hoạt động. – Ree