- std = c + + 11和-std = gnu + + 11有什么区别?

-std=c++11-std=gnu++11作为 gcc 和 clang 的编译参数有什么不同?c99gnu99也是这个问题吗?我了解 C + + 和 C 标准,我感兴趣的是参数的差异。

我曾在某处读到过,它与一些扩展有关,但我不清楚哪些扩展以及如何在一个新项目中选择其中之一。

77326 次浏览

正如您自己所发现的,这两个选项之间的区别在于是否启用了违反/扩展 C + + 标准的 GNU 扩展。GNU C + + 扩展被描述为 给你。您还可以在 C + + 程序中使用大多数 GNU C 扩展(描述为 给你)。阅读有关 -Wpedantic GCC 选项 给你的内容也会很有用。

注意,有些扩展在使用 -std=c++11时仍然有效,只要它们不违背标准。例如,当使用 MinGW 编译器时,我需要一个工作的 Boost.Lexical_Cast的扩展。但是,只要您不使用它们中的任何一个,您最好坚持不使用扩展的标准,以获得最大的可移植性。如果您发现自己被迫更改编译器,这可能会派上用场。