忽略与gcc不兼容的指针类型(char **→void **)

时间:2012-02-20 06:22:42

标签: c gcc legacy

我正在编译一些遗留的C代码,目的是将其迁移到Java 我不想修复C代码,我只是想运行它,以便比较数值结果。

我得到这个gcc 4.6.1编译错误:expected void** but argument is of type char**
写于20年前,这段代码并不关心指针类型,没什么大惊喜。

问题:如何告诉gcc忽略这些错误并进行编译呢? -fpermissive不起作用。

2 个答案:

答案 0 :(得分:3)

你想用什么版本的gcc编译? gcc 3支持-traditional标志,该标志会告诉它like a K&R C compiler,但gcc 4中不包含此选项。

您可能需要以某种方式运行gcc 3,例如安装将其包含在VM中的操作系统。我已经读过RHEL 4使用gcc 3,你可以尝试旧的FreeBSD版本,或者它可能在新的操作系统上作为一个软件包提供。

答案 1 :(得分:2)

默认情况下,gcc仅发出警告。您必须在编译标志中的某处具有-Werror-pedantic-errors标志,以将此警告转换为错误。

$ cat q.c
void foo(void **x) {}
void bar(void) { foo((char **)0); }
$ gcc -Wall -c q.c
q.c: In function ‘bar’:
q.c:2:1: warning: passing argument 1 of ‘foo’ from incompatible pointer type [enabled by default]
q.c:1:6: note: expected ‘void **’ but argument is of type ‘char **’
$ gcc -v
[...]
gcc version 4.6.2