Ce qui suit est obsolète, depuis que j'ai écris ce tuto, beaucoup d'eau est passée sous les ponts... Si à l'époque C::B pouvait faire figure d'IDE du pauvre, ce n'est plus le cas. Aujourd'hui les deux meilleurs IDE C++ du marché sont gratuits, sous certaines conditions (des affaires de gros sous, qui ne concernent pas les débutants, tant qu'ils sont débutants, ensuite ça peut changer...). D'un côté vous avez C::B une antiquité, conseillé par votre tuto c++ favori (qui est complètement à la ramasse aussi au passage), de l'autre des IDE qui sont à la pointe, et tout deux livrés avec un très bon compilateur (Visual Studio et QtCreator). Avec QtCreator on peut même choisir, si un ça ne suffit pas, tu peux en mettre plusieurs... Contrairement à une idée reçue, QtCreator est certes conçu pour bosser avec Qt, mais il fonctionne très bien aussi avec des projets qui n'ont aucune liaison avec Qt.
Aujourd'hui, choisir C::B, comme environnement d'apprentissage, c'est comme s'accrocher un gros boulet au pied, sur tous les plans, les deux autres sont très loin devant.
J'ai remarqué que bon nombre de débutants qui passent par ici, ont suivi le tuto OC à la lettre et se retrouvent avec un compilateur viellot (gcc 4.7.1) et mal configuré. Ce petit post n'est pas une question mais un mini-tutoriel pour mettre à jour le compilateur et le configurer pour qu'il devienne votre meilleur ami. A l'heure où j'écris ce poste la dernière version de gcc est la version 5.2.0, c'est la version qu'il faut choisir si possible, car c'est celle qui offre le meilleur support du C++. A défaut, se rabattre sur la version 5.1.0 ou la version 4.9.2. Les versions antérieures n'offrent qu'un support incomplet de C++11.
La première chose à faire est de télécharger une nouvelle distribution de MINGW gcc. Ca se trouve assez facilement avec google mais je vais quand même vous donner quelques liens:
http://nuwen.net/mingw.html Cette distribution est concoctée par Stephan T. Lavavej, un grand spécialiste de la bibliothèque standard du C++, il s'occupe du développement de celle de Visual C++. Cette distribution contient un certain nombre de bibliothèques supplémentaires dont boost (gcc 5.2.0 + boost 1.59 à l'heure ou j'écris ces lignes).
Cette liste n'est pas exhaustive, il y en a bien d'autres, si vous en connaissez de bonnes, n'hésitez pas à poster un lien je les ajouterai.
Une fois téléchargée, il faut commencer par l'installer, certaines ont un programme d'installation (suivre les instructions d'installation sur le site ad-hoc), d'autres comme celles que j'utilise sont de simples archives à décompacter.
Un conseil: Par le passé, les distributions de MinGW n'aimaient pas trop les chemins avec des espaces, j'ignore si c'est toujours d'actualité. Ne prenez pas de risques, un petit chemin bien court et sans espace fera parfaitement l'affaire.
Configuration de Code::Blocks
En l'état notre nouvelle version de gcc n'est utilisable qu'en ligne de commande, si on ne change pas la configuration de Code::Blocks, il continuera à utiliser sa vielle version de gcc. Pour configurer Code::Blocks ça se passe dans le menu Settings.
On commence par changer la chaine de compilation
Il faut remplacer le chemin qui se trouve dans Compiler installation directory par celui dans lequel on a installé notre nouveau gcc. Ensuite, il faut vérifier que les noms des différents programmes sont les bons. Ici, j'ai installé mon nouveau gcc dans d:\devtools\mingw64. Les exécutables de la chaine de compilation sont dans un sous répertoire bin.
Ensuite il faut faire pareil pour le debugger
Modifier le chemin de l'exécutable.
Normalement, c'est tout, maintenant CodeBlocks va utiliser notre nouvelle version de gcc, mais ce n'est pas suffisant. Pour profiter du c++14, il faut configurer le compilateur. Pour cela, on retourne dans Settings puis Compiler
Ici, cocher toutes les cases qui parlent de warning ou d'erreur sauf 2:
Stop compiling after first error [-Wfatal-errors]
Inhibits all warning messages [-w]
Puis on va dans l'onglet Other Options et on remplit la la fenêtre
Voilà, maintenant, on a un compilateur configuré en mode paranoïaque, qui ne tolèrera plus la moindre petite bourde. Configuré comme ça, il va être super pénible, et vous obliger à coder très proprement et à bien réfléchir à ce que vous faites.
Dernière étape vérifier que tout baigne
Pour cela, on va créer un petit projet console et le compiler
Tout va bien le compilateur est fonctionnel. __cplusplus est une macro qui contient la version du langage supportée, chez moi le programme va afficher
Hello world! my version is 201402
Edit, mise à jour des liens, les précédents étaient un petit peu périmés
Quant à moi je déconseille vivement d'activer TOUS les warnings de GCC, ils ne sont pas tous bon à prendre (y compris/surtout ceux de Scott Meyers), je déconseille également la version TDM de MinGW, ne serait-ce que pour sjlj (mais je crois voir sur leur site qu'on peut maintenant configurer ça).
J'ai écris ça surtout à partir de la constatation que la plupart des débutants qui passent par ici, utilisent Code::Blocks, c'est plutôt à eux que ce post est destiné, si je le mets sur un blog ou un site perso, ils ne le verront pas. En fait je ne suis pas du tout fan de Code::Blocks, je l'ai juste réinstallé pour l'occasion, et j'ai simplement raccroché le mingw que j'utilise par ailleurs. Il est probable que Code::Blocks sera désinstallé bien avant gcc. Comme toi, je lui préfère largemement MSVC et QtCreator.
J'ai nommé mon pojet testcb2, parce que j'avais déjà un projet testcb, reliquat de l'époque où je m'initiais à CMake.
Je vais éventuellement contacter un modérateur pour peut être le faire épingler, étant donné que Code::Blocks est l'IDE utilisé par le "cours officiel" d'OC, ça passera peut être. Sinon je le mettrais dans ma signature.
Edit @ Lynix: je suis trè loin d'avoir activé tous les warning possibles de gcc, si tu vas voir la doc de gcc tu vas voir qu'il y en a beaucoup plus que ça. Dans le tas, j'en ai peut être activé des discutables (et j'ai peut être oublié d'en activer des importants aussi). Pour un programmeur confirmé, activer tout ces warnings n'est pas forcément une bonne idée, parce que quand on est confirmé, on sait un peu ce que l'on fait (ou au moins on est censé savoir), donc effectivement ça a moins d'importance. Par contre quand on débute, c'est différent, il faut mettre un niveau de warning extrêmement élevé pour que le compilateur signale absolument tout ce qui est susceptible de poser un problème, afin de nous obliger à écrire le code le plus propre possible. Les warning de Scott Meyers vont signaler par exemple que le constructeur de copie / opérateur d'assignation n'ont pas été défini, alors qu'ils auraient du l'être (éventuellement delete) compte tenu de la structure de la classe (le compilateur a un peu de mal a faire la distinction entre sémantique d'entité et sémantique de valeur), qu'un constructeur mono-argument devrait être explicit, pour eviter des conversions innoportunes. Ce sont des warning qui peuvent aider un débutant à progresser.
Je l'ai mis dans mes marque-pages favoris; je m'en servirai quand j'aurai un nouvel ordi dans quelques semaines, histoire de pouvoir utiliser Code::Blocks avec un compilo à jour.
(Ce topic est à épingler, ça aiderai beaucoup de personnes qui souhaitent programmer en C++ moderne)
Je l'ai mis dans mes marque-pages favoris; je m'en servirai quand j'aurai un nouvel ordi dans quelques semaines, histoire de pouvoir utiliser Code::Blocks avec un compilo à jour.
(Ce topic est à épingler, ça aiderai beaucoup de personnes qui souhaitent programmer en C++ moderne)
Dans ton cas particulier, vu que tu vas changer de machine, mon conseil serait plutôt d'en profiter au passage pour changer d'IDE. gbdivers a cité MSVC (Visual Studio) et QtCreator, ces deux là sont à des années lumières de Code::Blocks en terme d'ergonomie et de fonctionnalités. Tu vas certainement perdre un peu de temps pour apprendre à t'en servir, mais c'est insignifiant par rapport à celui que tu vas gagner une fois que tu auras fait ce petit effort.
Visual studio inclue son propre compilateur et son propre debugger, il n'utilise pas du tout mingw. A ce jour, je pense que c'est le meilleur choix pour faire du c++ sous Windows.
J'ai remarqué que bon nombre de débutants qui passent par ici, ont suivi le tuto OC à la lettre et se retrouvent avec un compilateur viellot (gcc 4.7.1) et mal configuré
<troll> gcc 4.7.1 est suffisant pour faire du C with classes </troll>
Visual studio inclue son propre compilateur et son propre debugger, il n'utilise pas du tout mingw. A ce jour, je pense que c'est le meilleur choix pour faire du c++ sous Windows.
Heu, tu parle de MinGW comme meilleur choix ou de VC++?
MinGW, j'aurais tendance à être d'accord, ne serait-ce que parce que cela te permet d'avoir, par défaut, un code qui sera tout à fait portable sous linux
Par contre, VC++ (le compilateur de chez microsoft) m'a régulièrement déçu, notamment au niveau du respect de la norme.
Mais j'avouerai n'avoir pas encore vraiment regardé à la version 2015 du compilateur de microsoft; respecte-t-il "un peu mieux" les normes C++11 et C++14 (notamment au niveau des fonctions defaulted et deleted ainsi que des nothrow) ?
Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
Je parle au niveau IDE et sur du dev essentiellement orienté Windows. Le confort de l'IDE de Visual et sa panoplie d'outils n'a pas vraiment d'équivalent à part peut être QtCreator.
Le support de la norme m'a l'air correct, après je n'ai pas non plus tout regardé en détail. Il reste quelques trucs absents (variables template, constexpr c++14 notamment), mais ça a l'air d'aller dans le bon sens. Je n'ai pas encore trop eu l'occasion de coder du neuf pour l'instant, je n'ai fait pour ainsi dire que du "portage" et un peu de refactoring. Là je bosse en parallèle avec gcc 4.9.2 et vs2015, il n'y a pas trop de mauvaises surprises, si ça passe sur l'un ça passe sur l'autre.
Tu as bien de la chance, le nouveau projet que j'ai terminé ne compile toujours pas sur le VS de appveyor (parameter pack must be expanded in this context. (en sachant qu'il l'est déjà...)).
Et il y a encore des erreurs avec une version récente (testé sur http://webcompiler.cloudapp.net/ version 19.00.23427.0(x86)).
(Note: comment traduit-on le numéro de version en date de sortie ?)
(parameter pack must be expanded in this context. (en sachant qu'il l'est déjà...)).
Tu es bien sûr que ton code est à la norme ? Un des gros défaut de GCC (et peut-être aussi de Clang) est d'être permissif et de laisser passer des trucs non-standards.
Personnellement je n'ai aucun problème avec mes templates variadiques sous VS2015, les seules choses ne passant pas étant les constexpr C++14 et les variables template (dans le domaine de ce qui m'impacte bien sûr), ainsi que la constante __cplusplus
@gbdivers: Non, "MSVC 19.00.23427.0(x86)", "MSVC 19.0.23026.0", etc. En réalité, j'ai besoin d'une liste des modifications (bugs corrigés et nouvelles fonctionnalité supportés) histoire de savoir à quoi sont du certaines erreurs que je n'arrive pas à reproduire (ma faute ou différence de version).
Tu es bien sûr que ton code est à la norme ? Un des gros défaut de GCC (et peut-être aussi de Clang) est d'être permissif et de laisser passer des trucs non-standards.
Toujours :D.
Dans les faits, je ne sais pas. Je suppose que oui, mais si le compilateur ne dit rien, je ne m'en rends pas compte (Clang est en général moins permissif). Après, j'ai principalement joué avec des std::integral_sequence et propagé des listes de paramètres en plus petit groupe dans des fonctions.
Un truc comme 'foldt(f, 1, 2, 3, 4, 5)' -> 'f(f1,2), f(f(3,4), 5)'. À part des template variadique à tout va, rien d'extraordinaire.
Je suis en train de me faire un bout de script CMake qui pourrait me faire une série test pour le générateur choisi et me créer des variables CMake à partir desquelles je pourrais définir où non certains define. La macro principale est presque prête. L'idée est en gros d'écrire des test cases dont le main retourne 0 si le test est ok, != 0 sinon.
En fontion du nom du test, je teste seulement la compilation:
Si le nom du cpp se termine par fail_compile, je teste que la compilation échoue (exemple: utiliser un constructeur delete)
Si le nom du cpp se termine par _compile, je teste que la compilation réussit (exemple: est ce que la bibliothèque standard contient std::make_unique)
ou bien la compilation et l'exécution
Si le nom du cpp se termine par fail_run, je teste que la compilation réussit, mais l'exécution échoue (eg le return du main !=0) (pas d'idée d'exemple)
Si le nom du cpp se termine par _run, je teste que la compilation réussit, et l'exécution réussit (eg le return du main = 0) (compiler et executer un petit programme utilisant la feature qu'on veut tester, qui est censé devoir marcher).
Cette info est déjà affichée par les outils que j'utilise. La date de sortie de version me permettrait de savoir si tel correctif est présent dans telle version.
Par exemple, mon erreur semble liée à ce rapport de bug corrigé dans la "prochaine release", d'après un message du 22/05/2015.
Merci aux contributeurs de ce Post (que je viens d'utiliser!)
Je me permet juste deux questions:
Dans l'écran"Global compilor options" / "Other option", Int21h nous propose d'ajouter la commande "-Wold-style-cast", hors, sauf erreur de ma part, il semble qu'elle ne soit utile que pour le C et pas le C++ (ref ici) Donc je ne l'ai pas mise! Est ce que j'ai bien fait ?
Lors que j'ai lancé la compilation de mon premier "Hello word!", il m'a fallut changer le chemin des includes (setting/compilor/search directory/compilors) et ajouter le chemin des includes du nouveau compilateur. Est ce ce qu'il fallait faire ?
-Wold-style-cast (C++ and Objective-C++ only)Warn if an old-style (C-style) cast to a non-void type is used within a C++ program. The new-style casts (dynamic_cast, static_cast, reinterpret_cast, and const_cast) are less vulnerable to unintended effects and much easier to search for.
A ne surtout pas confondre avec -Wold-style-declaration qui est effectivement spécifique au C. La forme des déclarations/définitions à été modifiée en 1989 lors de la normalisation du C. La forme qui a été adoptée à l'époque n'est pas la forme introduite par Kerningham & Ritchie lorsqu'ils ont créé le C. Ce warning est destiné à prévenir si la forme de déclaration originale est utilisée.
2/
S'ils étaient renseignés alors oui il fallait le faire, cependant l'arborescence de mingw étant plus ou moins figée, le compilateur retrouve généralement ses petits
A défaut, se rabattre sur la version 5.1.0 ou la version 4.9.2. Les versions antérieures n'offrent qu'un support incomplet de C++11.
Bonjour,
Je viens d'installer la dernière version de Code::Blocks (15.12 RC1) avec le compilo gcc 4.9.2 justement. Ma question est donc de savoir si cette version de gcc (ou Mingw pour windows) est acceptable pour apprendre à coder en C++ moderne (en suivant le cours de gbdivers) ?
Si ce n'est pas le cas, je préfère attendre la sortie de C::B 15.12 en version stable avant de suivre le tuto de int21h pour installer gcc 5.x.
J'ai installé TDM GCC en suivant le tuto, mais j'ai ce message :
"testcs1 - Debug": The compiler's setup (GNU GCC Compiler) is invalid, so Code::Blocks cannot find/run the compiler.
Probably the toolchain path within the compiler options is not setup correctly?! (Do you have a compiler installed?)
Goto "Settings->Compiler...->Global compiler settings->GNU GCC Compiler->Toolchain executables" and fix the compiler's setup.
Skipping...
Nothing to be done (all items are up-to-date).
Target uses an invalid compiler; run aborted
Discord NaN. Mon site.
Mes articles | Nazara Engine | Discord NaN | Ma chaîne Twitch (programmation)
Installer la SDL 1.2 avec CodeBlocks sous Windows. Installer la SDL 2.0 avec CodeBlocks sous Windows.
Installer la SDL 1.2 avec CodeBlocks sous Windows. Installer la SDL 2.0 avec CodeBlocks sous Windows.
Installer la SDL 1.2 avec CodeBlocks sous Windows. Installer la SDL 2.0 avec CodeBlocks sous Windows.
Mes articles | Nazara Engine | Discord NaN | Ma chaîne Twitch (programmation)
Discord NaN. Mon site.
Discord NaN. Mon site.
Installer la SDL 1.2 avec CodeBlocks sous Windows. Installer la SDL 2.0 avec CodeBlocks sous Windows.
Discord NaN. Mon site.
Installer la SDL 1.2 avec CodeBlocks sous Windows. Installer la SDL 2.0 avec CodeBlocks sous Windows.
Discord NaN. Mon site.
Discord NaN. Mon site.