我正在编译一些遗留的C代码,目的是将其迁移到Java 我不想修复C代码,我只是想运行它,以便比较数值结果。
我得到这个gcc 4.6.1编译错误:expected void** but argument is of type char**
写于20年前,这段代码并不关心指针类型,没什么大惊喜。
问题:如何告诉gcc忽略这些错误并进行编译呢?
-fpermissive
不起作用。
答案 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