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 tant que 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 dans les parameters qui m’intéressent.

J’ai lu quelque part que cela concernait des extensions, mais je ne sais pas lesquelles et comment choisir 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 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 à propos de l’option -Wpedantic GCC ici .

Notez que certaines extensions peuvent toujours être en vigueur lors de l’utilisation de -std=c++11 , tant qu’elles ne contredisent pas la norme. Par exemple, en utilisant le compilateur MinGW, j’ai besoin des extensions pour un Boost.Lexical_Cast fonctionnel. Mais, tant que vous n’en utilisez aucun, vous feriez mieux de respecter la norme sans extensions pour une portabilité maximale. Cela peut être utile si vous êtes obligé de changer de compilateur.