2011-09-08 43 views
3

由於C++的類型安全性更嚴格,因此如果編譯爲C++文件,某些C代碼不會與C++編譯器一起編譯。是否有任何工具需要C代碼並從中生成有效的C++代碼。換句話說,它增加了C代碼使編譯器使用C++編譯器編譯所需的代碼。C到C++轉換器

請注意,我知道C和C++代碼可以鏈接,但在這裏我具體討論瞭如何將C代碼編譯爲C++編譯器並將它們視爲C++代碼文件。

+1

David,並且該工具沒有任何時間或耐力來完成它:(! – MetallicPriest

+4

類型安全系統是爲了防止你編寫錯誤,並沒有系統地檢查C++編譯器抱怨的地方,修復它們比留下潛在的錯誤更好嗎? – jeffythedragonslayer

回答

1

嘗試使用附加標誌進行編譯,使其更加不嚴格和/或編譯器不同。

編輯#1:我不能添加評論。我只是想出了一些想法,我並沒有親自執行這些想法。經過一番探索後,您可能是SOL,具體取決於C代碼是否寫入了不屬於C++子集的部分集合。

如果它只是非ansi C標準問題,您可能可以找到它。如果您使用的是gcc,可以嘗試使用Microsoft Visual C++或OpenWatcom。

至於旗幟,我認爲你可以做寬大,但我可能是錯的。標誌將取決於編譯器,我想我已經使用了-std = isoC99,-compat,-feat = features。

+0

我可以這樣做嗎? – MetallicPriest

0

不確定是否存在這樣的工具。
從來沒有嘗試過,因爲我從來沒有這樣做過,但是:
您可以嘗試將C代碼編譯爲lib。也許,如果你幸運的話,那麼你的C代碼的頭文件是有效的C++。在C++中包含這些頭文件,並鏈接到lib。

再次,從來沒有試過這個,不知道它是否會起作用。只是一個想法。

3

只需將您的C代碼放在一個單獨的.c文件中,並將其編譯爲C.您將使用哪種編譯器?

+0

如果我可以這樣做,我會這樣做,但我需要修改該代碼,並且需要將C++結構放入其中,因此不能將它分離到單獨的C文件中。 – MetallicPriest

2

語言差異很大,任何嘗試直接轉換都註定要失敗。你必須經過一箇中間的人工語言,C語言已經基本上已經編譯好了,在這一點上,所得到的C++會非常難看,你不會希望看到它。

1

我認爲你需要考慮這是在您的相關頭文件是C和C++代碼,並使用編譯器指令的組合如下:

#ifdef __cplusplus 
    extern "C" 
#endif 

您可以參考C++ FAQ-精簡版的「How to mix C and C++」爲對該主題進行更徹底的討論。