Je voulais comstackr le code source C ++ 11 dans Mac Terminal mais j’ai échoué. J’ai essayé g++ -std=c++11
, g++ -std=c++0x
, g++ -std=gnu++11
et g++ -std=gnu++0x
mais rien ne fonctionnait. Le terminal lit toujours l’ unrecognized command line option
. Cependant, g++ -std=gnu
et des choses comme ça ont bien fonctionné (bien sûr, le code source C ++ 11 ne pouvait pas être transmis).
Quelle option dois-je utiliser pour activer le support C ++ 11?
En passant, l’outil de ligne de commande que j’utilise est installé dans Xcode, et je suis presque sûr qu’ils sont à jour.
Comme d’autres l’ont fait remarquer, vous devriez utiliser clang++
plutôt que g++
. En outre, vous devez utiliser la bibliothèque libc ++ au lieu de la bibliothèque par défaut libstdc ++. La version incluse de libstdc ++ est assez ancienne et n’inclut donc pas les fonctionnalités de bibliothèque C ++ 11.
clang++ -std=c++11 -stdlib=libc++ -Weverything main.cpp
Si vous n’avez pas installé les outils de ligne de commande pour Xcode, vous pouvez exécuter le compilateur et d’autres outils sans utiliser l’outil xcrun
.
xcrun clang++ -std=c++11 -stdlib=libc++ -Weverything main.cpp
De même, si vous souhaitez désactiver un avertissement particulier, vous pouvez transmettre des indicateurs supplémentaires au compilateur. À la fin des messages d’avertissement, il affiche l’indicateur le plus spécifique permettant d’activer l’avertissement. Pour désactiver cet avertissement, vous devez append no-
au nom de l’avertissement.
Par exemple, vous ne voulez probablement pas les avertissements de compatibilité c ++ 98. A la fin de ces avertissements, il affiche le drapeau -Wc++98-compat
et pour les désactiver, vous passez -Wno-c++98-compat
.
XCode utilise clang
et clang++
lors de la compilation, pas g++
(en supposant que vous n’avez pas personnalisé les choses). Au lieu de cela, essayez:
$ cat t.cpp #include int main() { int* p = nullptr; std::cout << p << std::endl; } $ clang++ -std=c++11 -stdlib=libc++ t.cpp $ ./a.out 0x0
Grâce à la réponse de bames53 pour souligner que j'avais -stdlib=libc++
.
Si vous voulez utiliser des extensions GNU (et aussi utiliser C ++ 11), vous pouvez utiliser -std=gnu++11
au lieu de -std=c++11
, ce qui -std=c++11
mode C ++ 11 et conservera également Les extensions GNU sont activées.