当前位置:  开发笔记 > 编程语言 > 正文

问题编译K&R示例

如何解决《问题编译K&R示例》经验,为你挑选了1个好方法。

我在编写本书第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版本.



1> Johannes Sch..:

我认为错误来自于旧的C还不知道const的事实:strcmp有两个指向非const字符的指针(char *)我认为(这可能是它编译的原因,但不是你的编译器).但是,现在strcmp采取char const*(const char*是同样的事情).将您的函数原型更改为:

int numcmp(char const*, char const*);

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有