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 standards 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 je ne sais pas lesquelles et comment choisir entre l'une ou l'autre pour un nouveau projet.
gnu
ceux ne se réfèrent à des extensions, et si vous voulez écrire du code portable , vous devriez en tenir à des extensions standard et éviter complètement.Réponses:
Comme vous l'avez découvert vous-même, la différence entre les deux options est de savoir si les extensions GNU qui violent / étendent le standard C ++ sont activées ou non. Les extensions GNU C ++ sont décrites ici . Vous pouvez également utiliser la plupart des extensions GNU C (décrites ici ) dans vos programmes C ++. Il serait également utile de lire sur l'
-Wpedantic
option GCC ici .Notez que certaines extensions peuvent toujours être en vigueur lors de l'utilisation
-std=c++11
, tant qu'elles ne contredisent pas la norme. Par exemple, lorsque j'utilise le compilateur MinGW, j'ai besoin des extensions pour fonctionnerBoost.Lexical_Cast
. Mais, tant que vous n'en utilisez aucun, vous feriez mieux de vous en tenir à la norme sans extensions pour une portabilité maximale. Cela peut être utile si vous vous trouvez obligé de changer de compilateur.la source
gnu11
mais pas dansc++11
? La liste à laquelle vous avez lié est de toutes les extensions, et comme vous l'indiquez vous-même, certaines d'entre elles sont également activéesc++11
(comme__restrict__
).