Answers:
如您所知,这两个选项之间的区别在于是否启用了违反/扩展C ++标准的GNU扩展。这里描述了 GNU C ++扩展。您还可以在C ++程序中使用大多数GNU C扩展(此处描述)。在此处阅读有关-Wpedantic
GCC选项的信息也将很有用。
请注意,使用时,某些扩展名仍然可以生效-std=c++11
,只要它们与标准不矛盾即可。例如,当使用MinGW编译器时,我需要扩展才能正常工作Boost.Lexical_Cast
。但是,只要您不使用它们中的任何一个,就最好坚持不扩展而无需最大扩展性的标准。如果您发现自己不得不更改编译器,这可能会派上用场。
gnu11
但未启用的扩展c++11
?您链接到的列表包含所有扩展名,正如您自己指出的那样,其中的某些扩展名也已启用c++11
(例如__restrict__
)。
gnu
那些做参考的扩展,如果你想写可以移植的代码,你应该坚持一个标准,避免扩展干脆。