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.
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.