Quais são as diferenças entre -std=c++11
e -std=gnu++11
como parâmetro de compilação para gcc e clang? A mesma pergunta com c99
e gnu99
? Eu sei sobre os padrões C ++ e C, são as diferenças nos parâmetros que me interessam.
Li em algum lugar que isso tem a ver com algumas extensões, mas não está claro para mim quais e como escolher entre uma ou outra para um novo projeto.
gnu
queridos se referem a extensões, e se você quiser escrever código portátil você deve furar a um extensões padrão e evitar completamente.Respostas:
Como você se descobriu, a diferença entre as duas opções é se as extensões GNU que violam / estendem o padrão C ++ estão ativadas ou não. As extensões GNU C ++ são descritas aqui . Você também pode usar a maioria das extensões GNU C (descritas aqui ) em seus programas C ++. Também seria útil ler sobre a
-Wpedantic
opção GCC aqui .Observe que algumas extensões ainda podem estar em vigor quando usadas
-std=c++11
, desde que não contradigam o padrão. Por exemplo, ao usar o compilador MinGW, preciso das extensões para funcionarBoost.Lexical_Cast
. Mas, desde que você não use nenhum deles, é melhor seguir o padrão sem extensões para garantir a portabilidade máxima. Isso pode ser útil se você for obrigado a alterar o compilador.fonte
gnu11
mas não ativadasc++11
? A lista à qual você vinculou é de todas as extensões e, como você indica, algumas delas também estão ativadasc++11
(como__restrict__
).