Comstackr C ++ 11 avec g ++

J’essaie de mettre à jour mon compilateur C ++ en C ++ 11. J’ai cherché un peu et je suis arrivé à la conclusion que je devais utiliser le drapeau -std=c++0x ou -std=gnu++0x , mais je ne connais pas beaucoup de choses sur les drapeaux. Quelqu’un peut-il m’aider? (J’utilise Ubuntu 12.04)

Voici l’erreur que je reçois du compilateur lorsque j’essaie d’utiliser une bibliothèque incluse dans C ++ 11 (c’est-à-dire un tableau):

 #include  #include  int main() { std::array arr = {2, 3, 5}; ... } 

Ce fichier nécessite le support du compilateur et de la bibliothèque pour la prochaine norme ISO C ++, C ++ 0x. Ce support est actuellement expérimental et doit être activé avec les options de compilation -std = c ++ 0x ou -std = gnu ++ 0x.

Les indicateurs (ou les options du compilateur) ne sont que des arguments de ligne de commande ordinaires transmis à l’exécutable du compilateur.

En supposant que vous appelez g ++ à partir de la ligne de commande (terminal):

$ g++ -std=c++11 your_file.cpp -o your_program

ou

$ g++ -std=c++0x your_file.cpp -o your_program

si ce qui précède ne fonctionne pas.

Vous pouvez vérifier votre g++ par commande:

 which g++ g++ --version 

cela vous indiquera quel est le pointeur actuel.

Pour passer à g++ 4.7 (en supposant que vous l’ayez installé sur votre machine), exécutez:

 sudo update-alternatives --config gcc There are 2 choices for the alternative gcc (providing /usr/bin/gcc). Selection Path Priority Status ------------------------------------------------------------ 0 /usr/bin/gcc-4.6 60 auto mode 1 /usr/bin/gcc-4.6 60 manual mode * 2 /usr/bin/gcc-4.7 40 manual mode 

Puis sélectionnez 2 comme sélection (Ma machine pointe déjà vers g++ 4.7, donc le *)

Une fois que vous changez de complément, exécutez à nouveau g++ --version pour vérifier que la commutation a bien eu lieu.

Maintenant comstackz votre programme avec

 g++ -std=c++11 your_file.cpp -o main 

Votre ubuntu a définitivement une version suffisamment récente de g ++. L’indicateur à utiliser est -std=c++0x .

Si vous souhaitez conserver les extensions du compilateur GNU, utilisez -std = gnu ++ 0x plutôt que -std = c ++ 0x. Voici une citation de la page de manuel:

Le compilateur peut accepter plusieurs normes de base, telles que c89 ou c ++ 98, et les dialectes GNU de ces normes, tels que gnu89 ou gnu ++ 98. En spécifiant une norme de base, le compilateur acceptera tous les programmes suivant cette norme et ceux qui utilisent des extensions GNU qui ne la contredisent pas. Par exemple, -std = c89 désactive certaines fonctionnalités de GCC incompatibles avec ISO C90, telles que les mots clés “asm” et “typeof”, mais pas les autres extensions GNU n’ayant pas de signification dans ISO C90, telles que l’omission le moyen terme d’une expression “?:”. En revanche, en spécifiant un dialecte GNU d’un standard, toutes les fonctionnalités sockets en charge par le compilateur sont activées, même lorsque ces fonctionnalités modifient la signification de la norme de base et que certains programmes ssortingctement conformes peuvent être rejetés. La norme particulière est utilisée par -pedantic pour identifier les fonctionnalités qui sont des extensions GNU en fonction de cette version du standard. Par exemple-std = gnu89 -pedantic avertirait de // commentaires de style C ++, alors que -std = gnu99 -pedantic ne le ferait pas.

Vous pouvez vous référer au lien suivant pour lequel les fonctionnalités sont supscopes dans une version particulière du compilateur. Il a une liste exhaustive de prise en charge des fonctionnalités dans le compilateur. Looks GCC suit de près le standard et implémente avant tout autre compilateur.

En ce qui concerne votre question, vous pouvez comstackr en utilisant

  1. g++ -std=c++11 pour C ++ 11
  2. g++ -std=c++14 pour C ++ 14
  3. g++ -std=c++17 pour C ++ 17
  4. g++ -std=c++2a pour C ++ 20, bien que toutes les fonctionnalités de C ++ 20 ne soient pas encore sockets en charge, consultez ce lien pour la liste de prise en charge des fonctionnalités dans GCC.

La liste change assez rapidement, gardez un œil sur la liste si vous attendez que certaines fonctionnalités soient sockets en charge.