Qu'est-ce que le C++ ?
Le C++ est un langage de programmation, c'est à dire un langage permettant à un humain de spécifier les opérations qu'un ordinateur doit effectuer dans un programme. Il existe un grand nombre de langages divers et variés, chacun étant adapté à des tâches particulières. Le C++ est l'évolution d'un langage plus simple (et plus vieux), le C. Tout comme son ancêtre (qui est encore largement utilisé), il est très adapté à la réalisation de programmes complexes travaillant au niveau système (c'est à dire qu'il permet d'utiliser directement les fonctions des systèmes d'exploitation). Il est donc utilisé, avec le C, pour écrire des programmes bas niveau qui interagissent directement avec le système, ou des programmes ayant des contraintes de rapidité et d'efficacité assez importantes.
Le C++ est bien plus qu'une extension du langage C. Il renforce les contrôles d'erreurs par un typage plus fort (c'est à dire qu'il vérifie la nature des objets que l'on manipule, pour qu'on ne puisse pas mélanger les torchons et les serviettes), fournit des mécanismes de programmation objet parmi les plus avancés (voir aussi les principes des technologies objet), et utilise la librairie standard C++, qui contient la solution aux principaux problèmes d'algorithmique rencontrés (gestion des listes, des tableaux, des entrés / sorties, etc...).
En général, le C++ est compilé. Ceci signifie qu'il est traduit par un compilateur dans un code binaire directement compréhensible par l'ordinateur. Par opposition à ce code binaire, que l'on appelle classiquement le code objet (attention à ne pas confondre avec la notion d'objet de la programmation orientée objet), on appelle le texte originel le code source. Le code objet n'est pas lisible par un humain, en revanche le code source l'est. Réciproquement, seul le code objet est exécutable par la machine. Un compilateur n'est donc rien d'autre qu'un traducteur du code source vers le code objet.
Le code objet dépend évidemment de la machine pour laquelle il a été généré. Un code objet pour PowerPC n'est pas exécutable sur un Pentium, et inversement. En revanche, le code source est le même pour toutes les plates-formes. Ce code source doit respecter les règles de syntaxe du langage C++, qui ont été normalisées en 1999. Cependant, cette norme est encore récente, et tous les compilateurs ne la comprennent ou l'interprètent pas de la même manière ; par conséquent, il n'est encore pas rare de trouver des incompatibilités entre différents compilateurs de différentes sociétés. Cependant, ces différences vont aller en s'estompant, car seule la norme fait foi.
Je veux apprendre le C++ ou en savoir plus
Dans ce cas, vous êtes tombé sur la bonne page. J'ai écrit spécialement pour vous un cours de C++ complet, et oui je suis complètement givré. J'espère vous convaincre que ce langage est l'un des meilleurs, qu'il est très souple et effectivement très puissant.
Certains le trouvent compliqué, je ne suis pas d'accord. On peut très bien se passer des fonctionnalités objets et faire du C (très propre) avec un compilateur C++. Cependant, je vous mets en garde : n'utilisez pas les fonctionnalités objet du langage si vous voulez faire du C. En particulier, n'essayez pas de transformer un programme C classique en programme objet. Vous n'obtiendrez que du code spaghetti, très peu performant et... nul. En effet, on ne fait pas de l'objet a posteriori : les techniques objets ne sont valides que dans le cadre d'un cycle de développement objet. En clair, si vous connaissez le C (ou un autre langage purement fonctionnel), oubliez tout car le mode de raisonnement est complètement différent. Mieux vaut ne pas faire d'objet du tout que d'essayer d'introduire des objets C++ dans du code C pour le plaisir de le faire.
Si vous voulez voir les principes fondamentaux des technologies objets, voyez cette page. Si vous vous intéressez à Java plutôt qu'à C++, vous pouvez visiter le site de Tony Soueid indiqué dans les liens ci-dessous. Son cours de Java est un bon complément à mon cours de C++.
Le cours de C++ que je vous propose passe en revue les principales constructions syntaxiques et grammaticales du langage. Il s'appuie sur les Draft Papers du projet de normalisation du C++ (je n'ai pas pu obtenir la norme officielle).
Vous pouvez télécharger ce cours ici.
Outils
Il existe de nos jours de nombreux compilateurs sur le marché, et ce domaine est toujours en perpétuelle évolution. Récemment, Visual C++ 7.0 est sorti de manière peu remarquée dans tout le tapage .Net que Microsoft a fait. Pour autant, s'il est capable de générer du code « managé » pour la plate-forme .Net, il reste avant tout un compilateur C++ natif permettant de réaliser des programmes performants. Également sur le front de l'actualité, GCC 3.1 est également apparu et corrige un certain nombre de bogues graves qui empêchaient d'utiliser les compilateurs de la branche 3.0, qui pourtant apportent des améliorations notables tant du point de vu du support de la norme C++ que du point de vue des optimisations. Le compilateur de Borland ne semble pas avoir subi d'évolution majeure récemment. Quant au compilateur KAI C++, il a tout simplement été racheté par Intel pour le supprimer du marché, afin de promouvoir son propre compilateur ICC dédiés exclusivement aux processeurs Intel (AMD n'a pas fait une bonne affaire sur ce point, puisqu'il est peu probable qu'ICC atteigne le niveau de support que KAI C++ avait pour ses processeurs).
Visual C++ (actuellement en version 7.0) est le compilateur C++ développé par Microsoft. Il s'agit donc certainement du compilateur le plus approprié pour programmer sous Windows, puisqu'il est toujours en phase avec le système. C'est également sans doute l'un des compilateurs optimiseurs les plus performants (le jeux Quake II a été compilé avec Visual C++ 5.0). Cependant, ce n'est pas le meilleur compilateur au niveau du langage C++. Il ne comprend qu'un sous-ensemble limité du langage, et est de loin le plus en retard par rapport à la norme C++. De plus, il utilise des extensions propriétaires inventées par Microsoft pour leurs besoins personnels, ce qui rend les programmes absolument non portables. En général, ces extensions ne sont pas nécessaires et constituent une aberration logique vis à vis du langage, mais bon...
Borland C++ est toujours un très bon outil pour l'apprentissage. C'est assurément le compilateur le plus rapide du marché, ce qui réduit sérieusement les temps de développement et de mise au point pour les débutants. En revanche, le code objet généré par ce compilateur est de loin le plus mauvais comparé à la qualité de celui des autres outils existants. Au niveau du support du langage, le compilateur est légèrement plus avancé que Visual C++, et c'est l'un des compilateurs à être fourni avec une librairie standard C++ à peu près complète et respectant la norme. Borland C++ est parfaitement compatible avec Visual C++, ce qui est très important dans le monde Windows. Mais surtout, il fournit un environnement de développement bien plus abouti que celui de Visual, puisque, outre les technologies purement Microsoft (MFC, Active X, DCOM/OLE), il fournit des librairies complémentaires (VCL) et donne les moyens de développer des applications Corba sous Windows (voir cette page pour plus de renseignements sur ces technologies). Borland fournit en téléchargement gratuit son compilateur en version 5.5.1 (sans environnement de développement intégré), et le débogueur symbolique Turbo Debugger associé. Vous pourrez télécharger un SDK complet pour Windows sur le site de Microsoft, et obtenir ainsi une chaîne de compilation complète. Borland fournit également Kylix sous Linux, un environnement de développement Pascal/C++ complet, dont une version gratuite pour le développement de logiciels libres peut être téléchargée sur son site.
Le compilateur d'Intel ICC est tout simplement le meilleur compilateur optimiseur pour les processeurs Intel. C'est normal, puisqu'il a été conçu pour cela ! Il dispose d'un bon support du langage C++ et de la norme C++, et le code généré est tout simplement excellent. En revanche, il est dédié à la compilation des versions optimisées des programmes pour les processeurs Intel. S'il est possible de générer du code compatible avec les processeurs d'AMD, il est certain que les performances obtenues ne sont pas aussi bonnes que celles atteintes sur les processeurs dIntel. En ce qui concerne l'environnement de développement, ICC n'a pour principal but que d'être un remplacement des compilateurs des autres environnements. Par conséquent, il ne pourra pas être utilisé seul dans de bonnes conditions, sauf par les masochistes. La version Linux d'ICC peut être obtenue gratuitement pour un usage non commercial sur le site d'Intel.
En fait, aucun de ces compilateurs n'offre tous les avantages du compilateur GCC du projet GNU. Ce compilateur dispose des avantages suivants :
Cependant, même s'il est porté pour Windows, GCC n'est pas l'outil le plus approprié pour faire des applications Windows. En effet, il n'est pas capable de compiler des programmes développés avec Visual C++ ou Borland C++, parce qu'il ne supporte pas les extensions Microsoft au langage. En particulier, il ne permet pas de compiler des applications MFC ou ActiveX : seules les applications écrites en C peuvent être compilées. Quoi qu'il en soit, vous pourrez trouver un mode d'emploi simplifié des outils de programmation GNU sur cette page.
On notera que d'autre compilateurs ont existé par le passé et ont désormais disparu suite à des rachats de sociétés. Ainsi, le compilateur Watcom C/C++, qui a été développé par PowerSoft, puis racheté pour être abandonné par Sybase, n'est plus fourni qu'avec l'outil PowerBuilder de nos jours. Il fut l'un des premiers compilateurs optimiseurs, et était d'une qualité remarquable en son temps (c'est le compilateur des jeux Doom et Doom []). De même, le compilateur KAI C++ a été racheté par Intel, également pour être abandonné et remplacé par le compilateur développé en interne par Intel (sans doute pour empêcher que KAI C++ ne supporte les processeurs d'AMD). On notera que le code source du compilateur Watcom est en voie de libéralisation sous licence GPL, mais le produit est définitivement mort à présent à mon sens étant donné le retard qu'il a pris, ne serait-ce que par rapport à GCC.
Je vous propose au bas de cette page un certain nombre de liens vers des outils libres ou gratuits permettant de programmer en C++.
Benchmarks
J'ai réalisé quelques outils permettant d'évaluer les performances des compilateurs. Le premier outil est un fichier de test contenant la plupart des constructions grammaticales du langage C++, telles que définies dans les Draft Papers du projet de normalisation du langage. Le deuxième outil est un benchmark (hélas incomplet), que j'utilise pour évaluer les performances des compilateurs (ou des systèmes d'exploitation). J'utilise également le benchmark BYTEmark, développé par le magazine BYTE.
Vous pourrez obtenir les résultats de ces tests sur cette page.