2012-07-30 25 views
5

是否有任何选项省略可变型到变量类型设置为与在linux克++编译器编译在C int ++代码。用C的任何选项++设置默认变量类型为int

const bufLen = 2000; 

编译在solaris中很顺利(因为我正在从solaris移植到linux)。

一件事,我没有在文件控制,因为它是由一些解析器

由于我不能改变C++文件(由一些第三方以二进制的形式提供)产生的(因为它产生编译之前每次),我需要(克++)一些选项,以便编译抑制期间我可以包括/解决错误:

error: ISO C++ forbids declaration of `bufLen` with no type 

编辑:

信息:选择目前我使用-c -fPIC -Wno-deprecated -m32 -O2 -ffriend-injection -g

也是选择任何人造成我的麻烦(或其它影响)?


在此先感谢

+1

你确定它是一个C++(而不是C)文件吗? C89允许'int'被省略。 – avakar 2012-07-30 08:54:28

+2

你可以把它编译成C代码吗?换句话说,使用C编译器而不是C++编译器。 – sashang 2012-07-30 08:55:01

+0

@sashang:这是C++文件不是c文件。我刚刚提到了一行,它让我从10,000行解析器生成的C++文件中遇到麻烦 – Makesh 2012-07-30 08:56:54

回答

2

感谢AndersK谁给我一个解决方案(通过评论[我下面的问题])

我尝试使用-fms-extensions使用g ++这解决了我的问题

参考编译:http://gcc.gnu.org/onlinedocs/gcc-3.4.4/gcc/C-Dialect-Options.html

PS: 为了能见度,我在答案部分添加了答案。信用去实际回答的人:)

+0

是否意识到使用-fms-extensions获得代码编译的讽刺意味? -fms-extensions已添加到gcc中,以支持Microsoft对该语言的特定扩展(http://gcc.gnu.org/ml/gcc-patches/1999-08n/msg00363.html)。我非常怀疑你从Solaris移植到Linux的原始代码与Microsoft有什么关系。我的猜测是,真正的问题是代码生成器正在生成C代码,而您的问题是您正在使用C++编译器编译C代码。正如其他人所指出的,只需更改编译器选项以告诉gcc使用C编译器。 – sashang 2012-07-31 15:10:13

1
+0

如果文件确实包含C++(而不是纯C)代码,那么这将不起作用。 – 2012-07-30 09:01:31

+0

在这种情况下,它不是iso comform C++代码,如错误消息 – Paranaix 2012-07-30 09:03:38

+0

@Paranaix所述:这是我如何编译:/ usr/bin/g ++ xyz.cc -c -fPIC -Wno-deprecated -m32 -O2 -ffriend -injection -g -I/some_inc_dirs -o xyz.o ...它会帮助吗? – Makesh 2012-07-30 09:13:37