-
C++ et norme ANSI
Bonjour,
J'ai du mal à comprendre si la norme ANSI est adoptée "de base" par les compilateurs "modernes" d'aujourd'hui et plus précisement par GCC.
Car si j'ai bien compris, à partir de 1998 (je suis pas sûr de la date), ISO C++ a intégré la norme ANSI.
Ainsi, si je compile avec GCC, suis-je par default en ANSI-C++ (ou ISO/ANSI-C++) ?
Si oui, pourquoi existe-t-il des flags pour tels que std=c++98 -pedantic, surtout que par default c'est le flag std=gnu++98 qui est utilisé.
Je m'embrouille et n'y vois pas très clair.
D'où les questions suivantes:
1. Comment s'avoir si son code respecte la norme ANSI ou non? (faut-il mettre le flag ou pas)
2. Que préconise ou spécifie a la norme ANSI au juste (y a un document payant qui décrit ça je crois, à voir)
3. Et par default, quel impact à le flag std=gnu++98 ?
Merci de votre aide.
-
Le C++ est normalisé sous norme ISO, ce qui englobe automatiquement la norme ANSI. (ISO = comité de norme internationale, ANSI == norme américaine)
Si je ne dis pas de bêtise, on entends souvent le terme "ANSI C" car historiquement le C a été normalisé par le comité ANSI (donc américain) puis plus tard adopté comme standard international (ISO). Mais entre-temps les gens ont pris l'habitude d'utiliser le terme "ANSI C" et c'est resté dans les mœurs. On trouve des traces de cette époque par exemple dans GCC qui propose encore l'option -ansi. Il vaut mieux parler de ISO C/ ISO C++ de nos jours.
std=gnu++98
Compilation en mode C++98 + activation des extensions GNU.
std=c++98
Compilation en mode C++98 sans les extensions GNU
-pedantic
Cette option force une interprétation extrêmement strict du standard. Tout code non conforme est sanctionné par une erreur de compilation. En pratique je n'ai pas l'impression que beaucoup de gens utilisent -pedantic car c'est une option vraiment casse-bonbon parfois (trop stricte)
-
Tout cela est assez bien expliqué le manuel de gcc.