2010-08-29 83 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或其他顺序)。