2016-01-15 106 views
2

我有一個項目,其中的目標可能是某種類型的嵌入式系統,其編譯器可能是C89或同等版本。但是,我想使用GNU C的GCC擴展。將GNU C編譯爲C89

有沒有辦法告訴GCC編譯成C89?也許是一些組裝/反彙編過程?

+0

好的,但GNU擴展可能不會在Proprietary EmbedCo的編譯器 –

+0

上工作此外,我知道/ /評論的工作,不知道如果這是一個擴展 –

+2

目前還不清楚爲什麼你不能只使用GCC交叉編譯你的目標而不是使用一些古老的C89編譯器。 – Michael

回答

2

不幸的是,編譯爲C89和帶擴展名的gcc不一樣。它們實際上是相互排斥的。

您需要確定您的項目需要哪個,然後查看gcc的-std = c89(以及可能的pedantic)選項,如果您確實想要堅持使用C89。如果你想要GNU擴展,查看gcc文檔,那麼-std =參數有一組相當廣泛的選項。

現在還有一些gcc交叉編譯器,請看看這些交叉編譯器是否適合您的嵌入式目標平臺,您可能有更簡單的路徑可用。

+0

我明白了。我在想,也許GCC的行爲就像格拉斯哥的Haskell編譯器一樣,並且在編譯之前將它的擴展語言解析爲與標準兼容的東西,並且我可以得到該文件 –

+0

@k_g對C語言的擴展大多真正擴展了他們以前製作的語言不可能的事。沒有辦法將其中的大部分轉換爲標準的C代碼。 – fuz

+0

這可能是很好的,但我不知道有任何這樣的gcc手持。如果你現在有一些gcc工作,我認爲你最好的選擇可能是你的目標的gcc交叉編譯器。 –

0

我不知道GCC 5和更高,但在默認實際上是C89與GNU擴展。

如果您想明確使用-std標誌,如-std=gnu89

請參閱在線手冊中的Options Controlling C Dialect


如果您想使用GNU擴展,那麼您必須使用實際支持它們的編譯器,如GCC。如果你不想使用GNU擴展,那麼你可以使用任何兼容的編譯器。

另外請注意,GCC是很便攜。儘管更高版本可能不支持您的目標平臺,但可能有早期版本。

+0

我認爲OP的目標是自動將C的某些版本與GNU擴展轉換爲C89而無需GNU擴展。 – molbdnilo

+0

這不會特別有用,因爲gnu擴展無論如何都是gcc特定的。我希望能夠編寫gnu C並使用c89編譯器進行編譯。 –

+0

@k_g您是否嘗試過爲目標平臺構建GCC *交叉編譯器*?然後你可以*使用GNU擴展。否則你不能。就這麼簡單。你不能兩面都有。 –