Je voulais compiler le code source C++ 11 dans un terminal Mac, 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 n'a fonctionné. Terminal toujours lu unrecognized command line option
. Toutefois, g++ -std=gnu
et des choses comme ça ont bien fonctionné (bien sûr, le code source C++ 11 n'a pas pu passer).
Quelle option dois-je utiliser pour activer la prise en charge de C++ 11?
En passant, l'outil de ligne de commande que j'utilise est installé dans Xcode et je suis à peu près sûr qu'il est à 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 ++ à la place 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 la 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 le faire en utilisant 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 vous indique l'indicateur le plus spécifique qui permettrait d'activer l'avertissement. Pour désactiver cet avertissement, vous préférez ajouter no-
au nom de l'avertissement.
Par exemple, vous ne voulez probablement pas les avertissements de compatibilité c ++ 98. À 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 <iostream>
int main()
{
int* p = nullptr;
std::cout << p << std::endl;
}
$ clang++ -std=c++11 -stdlib=libc++ t.cpp
$ ./a.out
0x0
Merci à la réponse de bames53 pour avoir signalé que j'avais omis de jouer -stdlib=libc++
.
Si vous voulez utiliser certaines extensions GNU (et aussi utiliser C++ 11), vous pouvez utiliser -std=gnu++11
au lieu de -std=c++11
, qui activera le mode C++ 11 et conservera également les extensions GNU activées.