2012-01-17 51 views
7

我想知道是否可以安全地使用最新的GCC版本,或者人們通常會返回幾個版本(如果有的話)。是否有值得信賴的版本可以假定爲(相對)無缺陷的,或者我可以安全地假設(對於非救生程序)最新的GCC版本可以安全使用?我應該使用最新的GCC版本(通常,特別是今天)

編輯:

通過安全的 - 我的意思是在執行方面主要是沒有錯誤的,即。

+0

如果你想讓C++ 11支持流血邊緣,它仍然是在哪裏 – Flexo 2012-01-17 09:09:25

+4

*最新*意味着* HEAD *或*最新版本*(4.6.2我認爲)?我們是否應該假設*安全*是指安全生產?還是我們正在談論的標準合規性(例如,因爲代碼是可移植的並且不需要更改)? – 2012-01-17 09:16:24

+0

@MatthieuM。 +1,儘管我相信OP在這裏談到執行安全(「生活節目」) – arne 2012-01-17 09:27:12

回答

3

在沒有相反的具體要求的情況下,我傾向於使用我的(合理更新的)Linux發行版提供的任何版本的gcc。迄今爲止,這項政策對我來說效果不錯。

+0

是的,好吧,我進入了我的情況,因爲我使用的網絡Linux與舊的2006發行版,它不支持c + + 11 - 在這種情況下,我被迫明確決定我想下載哪個版本。 (這裏的系統管理員傢伙顯然不重視更新Linux版本或一般他們的工作) – dan12345 2012-01-17 09:52:49

3

我傾向於使用最新版本,因爲它實現了最新功能,修復了錯誤,但不幸的是引入了新的錯誤。引入錯誤通常在一些奇怪的角落案例中,所以我認爲總是使用最新版本是安全的。

2

更好的C++ 11支持是最新的gcc版本。您可以自己編譯它,但請注意,gcc 4.7幾乎準備好發佈,因此,您可能需要試一試。我經常這樣做,幾乎所有的gcc版本都是從4開始的,這是爲了改進C++標準的遵從性,並且經常會在編譯時間和優化器方面獲得改進。

通常,使用最新的g ++編譯器是一個好主意。

但是,有幾次我遇到了我使用的庫的問題。例如,g ++的4.5版打破了我使用的boost :: xpressive版本。或者更好地說,它揭示了一些在圖書館中破碎的東西。此外,使用g ++越高,嘗試使用其他編譯器編譯代碼的問題就越多,而落後於新功能的實現。

我認爲這是肯定的,使用最新的編譯器版本,並使用新標準的優點,因爲它們使我更高效,更快樂的程序員。然後,如果我必須將我的代碼移植到另一個編譯器,那麼我只需調整我需要的代碼部分,而這些部分最終不會花費太多時間。

+0

再次一個新手評論 - 但在什麼情況下,我想移植我的代碼?我的意思是我寫它,我可以把我最喜歡的C++編譯器無論我走到哪裏,不是?還是你指的是代碼分發給除我以外的用戶的情況?只是想知道 – dan12345 2012-01-17 10:01:10

+1

下面是我至少需要爲項目的一部分切換編譯器的情況:如果我需要在Windows上編譯項目,那麼在Windows上獲取最新的gcc版本通常很困難(我實際上並不知道如何去做)。另一種情況是,當你需要使用與某個SDK捆綁在一起的gcc時,比如Android的或者Google的NaCl。還有一種情況是,如果你想嘗試一下,例如,英特爾的C++編譯器,他們認爲它更適合於優化循環(在某些時候,我可以使用英特爾編譯器獲得速度提高9到10%的代碼,但那是一段很長的時間前)。 – dsign 2012-01-17 10:15:54

1

在正常的主機系統上,我會使用OS /發行版提供的內容,也許可以並行安裝幾個版本。在我的macosx系統gcc-4.2(OSX標準)上,安裝了gcc-4.6.2,gcc-llvm(OSX標準)和gcc-HEAD。這樣我就可以非常輕鬆地嘗試一些事情,更新gcc-HEAD以發揮出色的優勢,但是我的日常開發工作仍將繼續有工作和支持的版本。

在商業/工作環境中,我建議在寫下所使用的版本號時非常肛門,並且實際備份整個編譯器工具鏈,以便稍後在維護需要時可以返回工作相同的系統。沒有什麼比惱人的方式稍微改變編譯器(缺少定義等)更煩人了。

這對於嵌入式開發來說更重要,到目前爲止我實際上已經將編譯器工具鏈保存到了git中。 gcc版本中的輕微顛簸可能意味着一個可怕的惱人的編譯器錯誤(在嵌入式平臺上我經常會發現這種錯誤),或者大小爲例如40字節的凹凸,這可能會完全抹去您的項目。

相關問題