标签: c++ gcc c++11 clang
-std=c++11和-std=gnu++11作为gcc和clang的编译参数有什么区别?与c99和gnu99同样的问题?我了解C ++和C标准,这是我感兴趣的参数差异。
-std=c++11
-std=gnu++11
c99
gnu99
我在某处看到它与某些扩展有关,但我不清楚哪些扩展以及如何在新项目中选择其中一个。
答案 0 :(得分:76)
正如您自己发现的那样,两个选项之间的区别在于是否启用了违反/扩展C ++标准的GNU扩展。 GNU C ++扩展描述为here。您还可以在C ++程序中使用大多数GNU C扩展(描述为here)。阅读-Wpedantic GCC选项here。
-Wpedantic
请注意,使用-std=c++11时,某些扩展程序仍然有效,只要它们与标准不矛盾。例如,在使用MinGW编译器时,我需要工作Boost.Lexical_Cast的扩展。但是,只要你不使用它们中的任何一个,你最好坚持使用没有扩展的标准以获得最大的可移植性。如果您发现自己被迫改变编译器,这可能会派上用场。
Boost.Lexical_Cast