在GCC中,Clang和MSVC有什么办法符合C ++ 98而不是C ++ 03?

meta问题建议c ++ 98和c ++ 03标签应该成为同义词。 问题提出者使用C ++ 98标准的Is初始化部分来跟踪它? 如果没有,为什么它会添加到C ++ 03标准中?这是一个很好的问题,它为C ++ 03添加了值初始化。 考虑这个问题是后者的后续。

OP声称现代编译器不会区分C ++ 98和C ++ 03。 这令我感到惊讶,因为三个现代编译器就是这种情况。 虽然这个问题可以归结为“RTFM”,但我的搜索没有发现任何结论。

GCC

他们的标准页面:

最初的ISO C ++标准作为ISO标准(ISO / IEC 14882:1998)发布,并通过2003年发布的技术勘误表(ISO / IEC 14882:2003)进行了修订。 这些标准分别被称为C ++ 98和C ++ 03。 GCC实现了C ++ 98的大部分(导出是一个显着的例外)以及C ++ 03中的大部分更改。 要在GCC中选择此标准,请使用选项-ansi,-std = c ++ 98或-std = c ++ 03; ...

此外,他们的方言选项页面说:

在C ++模式下,[ansi]相当于-std = c ++ 98。

将“c ++ 98”和“c ++ 03”组合在一起:

1998年的ISO C ++标准加上2003年的技术勘误和一些额外的缺陷报告。 与C ++代码的-ansi相同。

这似乎意味着没有办法只打开C ++ 98模式。

我发现的唯一的东西就是在他们的手册上,它在C ++语言特性下说:

铛完全实现了所有的标准C ++ 98,除了导出的模板(在C ++ 11中被删除),...

没有提到C ++ 03。 它还指出:

铿锵声支持-std选项,它改变了clang使用的语言模式。 C支持的模式是c89,gnu89,c94,c99,gnu99,c11,gnu11以及这些模式的各种别名。 如果没有指定-std选项,则clang默认为gnu11模式。 在早期的模式中,许多C99和C11功能都作为符合性扩展支持,并带有警告。

这当然是他们的C编译器,我无法在C ++编译器上找到任何文档,比如哪些选项可以传递给-std 。 我只是假设Clang反映了GCC的方言选项(例如,C ++ 03在Clang上是有效的),尽管没有证据我不能说得那么确定。

MSVC

据我所知,MSVC不允许你像上面那样改变语言标准。 在MSDN上搜索“C ++ 98”不会产生任何内容。 看来他们实现了C ++ 98 / C ++ 11,例如Herb Sutter所说的。

问题

虽然这些问题听起来很明显,但元问题让我意识到它并不那么明显。

  • 有没有办法让GCC只符合C ++ 98? 在gcc中执行C ++ 98标准只需链接到我所做的相同文档,而不需要进一步考虑它是否确实符合C ++ 98。

  • 铿锵符合C ++ 98还是符合C ++ 03? 我在哪里可以找到相关文件?

  • MSVC也一样。 有没有办法在MSVC中更改语言标准以仅符合C ++ 98?


  • 有没有办法让GCC只符合C ++ 98?

    不,你已经完全覆盖了你问题中的可用标志,并且他们都不能做到这一点。


    铿锵符合C ++ 98还是符合C ++ 03? 我在哪里可以找到相关文件?

    Clang实现C ++ 03减去export ,就像GCC一样:

    Clang实现了除导出(已在C ++ 11中删除)之外的所有ISO C ++ 1998标准(包括ISO C ++ 2003标准中讨论的缺陷)。

  • http://clang.llvm.org/cxx_status.html

  • MSVC也一样。 有没有办法在MSVC中更改语言标准以仅符合C ++ 98?

    不会。正如你所说,你不能在MSVC中指定C ++版本。 有一个编译器标志列表,并不是它们中的任何一个的功能。

  • http://msdn.microsoft.com/en-us/library/fwkeyyhe.aspx

  • C ++ 03的全部重点是对C ++ 98进行更正,从而有效地取代它,而不是将其作为一个新的单元。 想要“恢复”这些修复是没有意义的。 这就像要求Windows 7 SP2†启动到Windows 7 SP1模式一样。 这不是任何人都想要支持的模式。

    †虚构。

    链接地址: http://www.djcxy.com/p/15145.html

    上一篇: In GCC, Clang and MSVC is there any way to conform against C++98 and not C++03?

    下一篇: Why would clang++ fail to compile on a Mac, under Mavericks, except with sudo?