web-dev-qa-db-fra.com

Quelles sont les différences entre -std = c ++ 11 et -std = gnu ++ 11?

Quelles sont les différences entre -std=c++11 et -std=gnu++11 comme paramètre de compilation pour gcc et clang? Même question avec c99 et gnu99? Je connais les normes C++ et C, ce sont les différences de paramètres qui m'intéressent.

J'ai lu quelque part que cela avait à voir avec certaines extensions, mais il m'est difficile de savoir lesquelles et comment choisir entre l'une ou l'autre pour un nouveau projet.

116
Klaim

Comme vous l'avez découvert vous-même, la différence entre les deux options est de savoir si GNU les extensions qui violent/étendent la norme C++ sont activées ou non. Le GNU C++ les extensions sont décrites ici . Vous pouvez également utiliser la plupart des extensions GNU C (décrites ici )) dans vos programmes C++. également utile de lire sur le -Wpedantic Option GCC ici .

Notez que certaines extensions peuvent toujours être actives lorsqu’on utilise -std=c++11, tant qu'ils ne contredisent pas la norme. Par exemple, lors de l’utilisation du compilateur MinGW, j’ai besoin des extensions pour travailler Boost.Lexical_Cast. Mais, tant que vous n'en utilisez aucun, il est préférable de vous en tenir à la norme sans extensions pour une portabilité maximale. Cela pourrait s'avérer utile si vous vous trouvez obligé de changer de compilateur.

80
daramarak