2010-08-29 166 views
9

我讀這個有點困惑:Gcc 4.5 online manual --- Standards sectiong ++標準支持

他們解釋這

原來的ISO C++標準發佈爲ISO標準(ISO/IEC 14882:1998),並發表在2003年(ISO/IEC 14882:2003)一技術勘誤修改。這些標準分別被稱爲C++ 98和C++ 03。 GCC實現了C++ 98的大部分(導出是一個顯着的例外)以及C++ 03中的大部分更改。

但他們不知道gcc是否支持'裸'98 C++或只修正C++ 03。在「C語言」部分,解釋更加清晰:

1999 ISO ISO標準中的錯誤已在2001,2004和2007年發佈的三份技術勘誤中得到糾正.GCC不支持未糾正的版本。

所以我的問題是:g ++是否也是這種情況(不支持未修正的標準)?

選擇g ++標準的唯一選項是-std=c++98,-std=gnu++98,-std=c++0x-std=gnu++0x。那是對的嗎 ?

最後一個問題:什麼是-ansi選項呢?它僅用於C模式嗎?

編輯:

-ansi同義詞用於-std = C89(對於C)或-std = C++ 98

+1

*你爲什麼要支持未修正的標準? – 2010-08-29 18:37:04

+0

這是一個問題,以檢查我是否正確理解了C++ 98,C++ 03等與gcc doc之間的關係;不是「我想要」。 – 2010-08-29 20:38:53

+0

請注意,C++ 03標準文本和C++ 98文本之間的顯着差異是澄清了歧義等 - 當編譯器試圖實現C++ 98時發現的變化。在那裏,GCC無法合理支持C++ 98。 – MSalters 2010-08-30 11:05:16

回答

9

gcc不支持未修正的標準,它的目標是(儘管未達到100%)C++ 03一致性。從技術上講,目前C++只有一個標準,包含TC1的版本就是它。正如它所說的「支持C++ 03中的大部分更改」。要選擇此標準,請使用選項-ansi-std=c++98之一。

沒有支持或選擇選擇過時未經修正的1998版標準。

+0

TC1和TR1有什麼不同? – 2010-08-29 19:53:01

+2

@Martin:TC1基本上是C++ 98的錯誤修正,而TR1是關於可能的庫擴展的報告。兩件完全不同的事情。 – sellibitze 2010-08-29 19:58:27

3

至少據我所知,沒有,沒有辦法「關閉」對C++ 03的新功能的支持。

-ansi被C前端認可。要了解哪些組件可以識別哪些交換機,可以使用g++ -v --help(這會產生大量輸出,因此通常需要將其管道輸入less或其他順序)。