2012-07-30 57 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