<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> <HTML> <HEAD> 	<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=iso-8859-1"> 	<TITLE>Le langage C++</TITLE> 	<META NAME="GENERATOR" CONTENT="OpenOffice.org 1.0  (Linux)"> 	<META NAME="AUTHOR" CONTENT="Christian Casteyde"> 	<META NAME="CREATED" CONTENT="20000422;20343700"> 	<META NAME="CHANGED" CONTENT="20020914;14400900"> 	<META NAME="CLASSIFICATION" CONTENT="Le langage C++"> 	<META NAME="DESCRIPTION" CONTENT="Description de ce qu'est un langage de programmation. Notion de sources, de code objet, de compilation. Description des diff&eacute;rents outils et environnement de programmation C/C++."> 	<META NAME="KEYWORDS" CONTENT="langage, C, C++, compilation, interpr&eacute;tation, &eacute;dition de liens, objet, sources, comparatif, compilateurs, environnements"> </HEAD> <BODY LANG="fr-FR"> <P ALIGN=CENTER><FONT FACE="Arial, sans-serif"><FONT SIZE=5 STYLE="font-size: 20pt"><B>Le langage C++</B></FONT></FONT></P> <P><FONT SIZE=4><B>Qu'est-ce que le C++&nbsp;?</B></FONT></P> <P>Le C++ est un langage de programmation, c'est &agrave; dire un langage permettant &agrave; un humain de sp&eacute;cifier les op&eacute;rations qu'un ordinateur doit effectuer dans un programme. Il existe un grand nombre de langages divers et vari&eacute;s, chacun &eacute;tant adapt&eacute; &agrave; des t&acirc;ches particuli&egrave;res. Le C++ est l'&eacute;volution d'un langage plus simple (et plus vieux), le C. Tout comme son anc&ecirc;tre (qui est encore largement utilis&eacute;), il est tr&egrave;s adapt&eacute; &agrave; la r&eacute;alisation de programmes complexes travaillant au niveau <I>syst&egrave;me</I> (c'est &agrave; dire qu'il permet d'utiliser directement les fonctions des syst&egrave;mes d'exploitation). Il est donc utilis&eacute;, avec le C, pour &eacute;crire des programmes bas niveau qui interagissent directement avec le syst&egrave;me, ou des programmes ayant des contraintes de rapidit&eacute; et d'efficacit&eacute; assez importantes.</P> <P>Le C++ est bien plus qu'une extension du langage C. Il renforce les contr&ocirc;les d'erreurs par un <I>typage</I> plus fort (c'est &agrave; dire qu'il v&eacute;rifie la nature des objets que l'on manipule, pour qu'on ne puisse pas m&eacute;langer les torchons et les serviettes), fournit des m&eacute;canismes de programmation objet parmi les plus avanc&eacute;s (voir aussi <A HREF="../objet/index.html">les principes des technologies objet</A>), et utilise la librairie standard C++, qui contient la solution aux principaux probl&egrave;mes d'algorithmique rencontr&eacute;s (gestion des listes, des tableaux, des entr&eacute;s / sorties, etc...).</P> <P>En g&eacute;n&eacute;ral, le C++ est <I>compil&eacute;</I>. Ceci signifie qu'il est traduit par un <I>compilateur</I> dans un code binaire directement compr&eacute;hensible par l'ordinateur. Par opposition &agrave; ce code binaire, que l'on appelle classiquement le code <I>objet</I> (attention &agrave; ne pas confondre avec la notion d'objet de la programmation orient&eacute;e objet), on appelle le texte originel le code <I>source</I>. Le code objet n'est pas lisible par un humain, en revanche le code source l'est. R&eacute;ciproquement, seul le code objet est ex&eacute;cutable par la machine. Un compilateur n'est donc rien d'autre qu'un traducteur du code source vers le code objet.</P> <P STYLE="font-style: normal">Le code objet d&eacute;pend &eacute;videmment de la machine pour laquelle il a &eacute;t&eacute; g&eacute;n&eacute;r&eacute;. Un code objet pour PowerPC n'est pas ex&eacute;cutable sur un Pentium, et inversement. En revanche, le code source est le m&ecirc;me pour toutes les plates-formes. Ce code source doit respecter les r&egrave;gles de syntaxe du langage C++, qui ont &eacute;t&eacute; normalis&eacute;es en 1999. Cependant, cette norme est encore r&eacute;cente, et tous les compilateurs ne la comprennent ou l'interpr&egrave;tent pas de la m&ecirc;me mani&egrave;re&nbsp;; par cons&eacute;quent, il n'est encore pas rare de trouver des incompatibilit&eacute;s entre diff&eacute;rents compilateurs de diff&eacute;rentes soci&eacute;t&eacute;s. Cependant, ces diff&eacute;rences vont aller en s'estompant, car seule la norme fait foi.</P> <P><BR><BR> </P> <P STYLE="font-style: normal"><FONT SIZE=4><B>Je veux apprendre le C++ ou en savoir plus</B></FONT></P> <P STYLE="font-style: normal">Dans ce cas, vous &ecirc;tes tomb&eacute; sur la bonne page. J'ai &eacute;crit sp&eacute;cialement pour vous un cours de C++ complet, et oui je suis compl&egrave;tement givr&eacute;. J'esp&egrave;re vous convaincre que ce langage est l'un des meilleurs, qu'il est tr&egrave;s souple et effectivement tr&egrave;s puissant.</P> <P STYLE="font-style: normal">Certains le trouvent compliqu&eacute;, je ne suis pas d'accord. On peut tr&egrave;s bien se passer des fonctionnalit&eacute;s objets et faire du C (tr&egrave;s propre) avec un compilateur C++. Cependant, je vous mets en garde&nbsp;: n'utilisez pas les fonctionnalit&eacute;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&egrave;s peu performant et... nul. En effet, on ne fait pas de l'objet a posteriori&nbsp;: les techniques objets ne sont valides que dans le cadre d'un cycle de d&eacute;veloppement objet. En clair, si vous connaissez le C (ou un autre langage purement fonctionnel), oubliez tout car le mode de raisonnement est compl&egrave;tement diff&eacute;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.</P> <P>Si vous voulez voir les principes fondamentaux des technologies objets, voyez <A HREF="../objet/index.html">cette page</A>. Si vous vous int&eacute;ressez &agrave; Java plut&ocirc;t qu'&agrave; C++, vous pouvez visiter le site de Tony Soueid indiqu&eacute; dans les liens ci-dessous. Son cours de Java est un bon compl&eacute;ment &agrave; mon cours de C++.</P> <P STYLE="font-style: normal">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). </P> <P>Vous pouvez t&eacute;l&eacute;charger ce cours <A HREF="cours/index.html">ici</A>.</P> <P><BR><BR> </P> <P STYLE="font-style: normal"><FONT SIZE=4><B>Outils</B></FONT></P> <P>Il existe de nos jours de nombreux compilateurs sur le march&eacute;, et ce domaine est toujours en perp&eacute;tuelle &eacute;volution. R&eacute;cemment, Visual C++ 7.0 est sorti de mani&egrave;re peu remarqu&eacute;e dans tout le tapage .Net que Microsoft a fait. Pour autant, s'il est capable de g&eacute;n&eacute;rer du code &laquo;&nbsp;manag&eacute;&nbsp;&raquo; pour la plate-forme .Net, il reste avant tout un compilateur C++ natif permettant de r&eacute;aliser des programmes performants. &Eacute;galement sur le front de l'actualit&eacute;, GCC 3.1 est &eacute;galement apparu et corrige un certain nombre de bogues graves qui emp&ecirc;chaient d'utiliser les compilateurs de la branche 3.0, qui pourtant apportent des am&eacute;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'&eacute;volution majeure r&eacute;cemment. Quant au compilateur KAI C++, il a tout simplement &eacute;t&eacute; rachet&eacute; par Intel pour le supprimer du march&eacute;, afin de promouvoir son propre compilateur ICC d&eacute;di&eacute;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).</P> <P STYLE="font-style: normal">Visual C++ (actuellement en version 7.0) est le compilateur C++ d&eacute;velopp&eacute; par Microsoft. Il s'agit donc certainement du compilateur le plus appropri&eacute; pour programmer sous Windows, puisqu'il est toujours en phase avec le syst&egrave;me. C'est &eacute;galement sans doute l'un des compilateurs optimiseurs les plus performants (le jeux Quake II a &eacute;t&eacute; compil&eacute; 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&eacute; du langage, et est de loin le plus en retard par rapport &agrave; la norme C++. De plus, il utilise des extensions propri&eacute;taires invent&eacute;es par Microsoft pour leurs besoins personnels, ce qui rend les programmes absolument non portables. En g&eacute;n&eacute;ral, ces extensions ne sont pas n&eacute;cessaires et constituent une aberration logique vis &agrave; vis du langage, mais bon...</P> <P>Borland C++ est toujours un tr&egrave;s bon outil pour l'apprentissage. C'est assur&eacute;ment le compilateur le plus rapide du march&eacute;, ce qui r&eacute;duit s&eacute;rieusement les temps de d&eacute;veloppement et de mise au point pour les d&eacute;butants. En revanche, le code objet g&eacute;n&eacute;r&eacute; par ce compilateur est de loin le plus mauvais compar&eacute; &agrave; la qualit&eacute; de celui des autres outils existants. Au niveau du support du langage, le compilateur est l&eacute;g&egrave;rement plus avanc&eacute; que Visual C++, et c'est l'un des compilateurs &agrave; &ecirc;tre fourni avec une librairie standard C++ &agrave; peu pr&egrave;s compl&egrave;te et respectant la norme. Borland C++ est parfaitement compatible avec Visual C++, ce qui est tr&egrave;s important dans le monde Windows. Mais surtout, il fournit un environnement de d&eacute;veloppement bien plus abouti que celui de Visual, puisque, outre les technologies purement Microsoft (MFC, Active X, DCOM/OLE), il fournit des librairies compl&eacute;mentaires (VCL) et donne les moyens de d&eacute;velopper des applications Corba sous Windows (voir <A HREF="../objet/index.html">cette page</A> pour plus de renseignements sur ces technologies). Borland fournit en t&eacute;l&eacute;chargement gratuit son compilateur en version 5.5.1 (sans environnement de d&eacute;veloppement int&eacute;gr&eacute;), et le d&eacute;bogueur symbolique Turbo Debugger associ&eacute;. Vous pourrez t&eacute;l&eacute;charger un SDK complet pour Windows sur le site de Microsoft, et obtenir ainsi une cha&icirc;ne de compilation compl&egrave;te. Borland fournit &eacute;galement Kylix sous Linux, un environnement de d&eacute;veloppement Pascal/C++ complet, dont une version gratuite pour le d&eacute;veloppement de logiciels libres peut &ecirc;tre t&eacute;l&eacute;charg&eacute;e sur son site.</P> <P STYLE="font-style: normal">Le compilateur d'Intel ICC est tout simplement le meilleur compilateur optimiseur pour les processeurs Intel. C'est normal, puisqu'il a &eacute;t&eacute; con&ccedil;u pour cela&nbsp;! Il dispose d'un bon support du langage C++ et de la norme C++, et le code g&eacute;n&eacute;r&eacute; est tout simplement excellent. En revanche, il est d&eacute;di&eacute; &agrave; la compilation des versions optimis&eacute;es des programmes pour les processeurs Intel. S'il est possible de g&eacute;n&eacute;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&eacute;veloppement, ICC n'a pour principal but que d'&ecirc;tre un remplacement des compilateurs des autres environnements. Par cons&eacute;quent, il ne pourra pas &ecirc;tre utilis&eacute; seul dans de bonnes conditions, sauf par les masochistes. La version Linux d'ICC peut &ecirc;tre obtenue gratuitement pour un usage non commercial sur le site d'Intel.</P> <P STYLE="font-style: normal">En fait, aucun de ces compilateurs n'offre tous les avantages du compilateur GCC du projet GNU. Ce compilateur dispose des avantages suivants&nbsp;:</P> <UL> 	<LI><P STYLE="font-style: normal">libert&eacute; d'utilisation, de 	modification et de distribution compl&egrave;te (licence GNU GPL)&nbsp;;</P> 	<LI><P STYLE="font-style: normal">possibilit&eacute; d'&eacute;crire 	des programmes propri&eacute;taires (biblioth&egrave;ques sous 	licence GNU LGPL)&nbsp;;</P> 	<LI><P STYLE="font-style: normal">p&eacute;rennit&eacute; des 	d&eacute;veloppements effectu&eacute;s avec ce compilateur (les 	codes sources sont disponibles, il est maintenu activement et ne 	peut pas &ecirc;tre rachet&eacute; pour &ecirc;tre abandonn&eacute; 	par une soci&eacute;t&eacute; comme cela s'est produit avec les 	compilateurs Watcom C++ et KAI C++)&nbsp;;</P> 	<LI><P STYLE="font-style: normal">le plus vaste support du langage 	C++ (norme quasiment compl&egrave;tement int&eacute;gr&eacute;e)&nbsp;;</P> 	<LI><P>librairie standard C++ tr&egrave;s compl&egrave;te et 	conforme &agrave; la norme&nbsp;;</P> 	<LI><P STYLE="font-style: normal">portabilit&eacute; absolue sur 	toutes les plates-formes (GCC existe sous quasiment tous les Unix 	dont Linux, FreeBSD et MaxOS X, ainsi que sous DOS, OS/2 et 	Windows)&nbsp;;</P> 	<LI><P STYLE="font-style: normal">respect de la version 3 des 	sp&eacute;cifications des ABI C++ permettant l'interop&eacute;rabilit&eacute; 	binaire des fichiers objets g&eacute;n&eacute;r&eacute;s avec ceux 	g&eacute;n&eacute;r&eacute;s par les autres compilateurs (notamment 	le compilateur d'Intel ICC)&nbsp;;</P> 	<LI><P STYLE="font-style: normal">optimisations s&eacute;rieuses et 	efficaces du code (le jeux Quake a &eacute;t&eacute; compil&eacute; 	avec la version DOS de GCC).</P> </UL> <P>Cependant, m&ecirc;me s'il est port&eacute; pour Windows, GCC n'est pas l'outil le plus appropri&eacute; pour faire des applications Windows. En effet, il n'est pas capable de compiler des programmes d&eacute;velopp&eacute;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&nbsp;: seules les applications &eacute;crites en C peuvent &ecirc;tre compil&eacute;es. Quoi qu'il en soit, vous pourrez trouver un mode d'emploi simplifi&eacute; des outils de programmation GNU sur <A HREF="gcc/index.html">cette page</A>.</P> <P STYLE="font-style: normal">On notera que d'autre compilateurs ont exist&eacute; par le pass&eacute; et ont d&eacute;sormais disparu suite &agrave; des rachats de soci&eacute;t&eacute;s. Ainsi, le compilateur Watcom C/C++, qui a &eacute;t&eacute; d&eacute;velopp&eacute; par PowerSoft, puis rachet&eacute; pour &ecirc;tre abandonn&eacute; par Sybase, n'est plus fourni qu'avec l'outil PowerBuilder de nos jours. Il fut l'un des premiers compilateurs optimiseurs, et &eacute;tait d'une qualit&eacute; remarquable en son temps (c'est le compilateur des jeux Doom et Doom []). De m&ecirc;me, le compilateur KAI C++ a &eacute;t&eacute; rachet&eacute; par Intel, &eacute;galement pour &ecirc;tre abandonn&eacute; et remplac&eacute; par le compilateur d&eacute;velopp&eacute; en interne par Intel (sans doute pour emp&ecirc;cher que KAI C++ ne supporte les processeurs d'AMD). On notera que le code source du compilateur Watcom est en voie de lib&eacute;ralisation sous licence GPL, mais le produit est d&eacute;finitivement mort &agrave; pr&eacute;sent &agrave; mon sens &eacute;tant donn&eacute; le retard qu'il a pris, ne serait-ce que par rapport &agrave; GCC.</P> <P>Je vous propose au bas de cette page un certain nombre de liens vers des outils <A HREF="../freesoftware/GNU.html">libres</A> ou gratuits permettant de programmer en C++.</P> <P><BR><BR> </P> <P><FONT SIZE=4><B>Benchmarks</B></FONT></P> <P>J'ai r&eacute;alis&eacute; quelques outils permettant d'&eacute;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&eacute;finies dans les Draft Papers du projet de normalisation du langage. Le deuxi&egrave;me outil est un benchmark (h&eacute;las incomplet), que j'utilise pour &eacute;valuer les performances des compilateurs (ou des syst&egrave;mes d'exploitation). J'utilise &eacute;galement le benchmark BYTEmark, d&eacute;velopp&eacute; par le magazine BYTE.</P> <P>Vous pourrez obtenir les r&eacute;sultats de ces tests sur <A HREF="benchmarks/index.html">cette page</A>.</P> <P><BR><BR> </P> <P STYLE="font-style: normal"><FONT SIZE=4><B>Liens</B></FONT></P> <P>La page sur le C++ de <A HREF="http://www.research.att.com/~bs/C++.html">Bjarne Stroustrup</A> (l'inventeur du C++) est incontournable.</P> <P>La page du <A HREF="http://anubis.dkuug.dk/jtc1/sc22/wg21/">groupe de travail du projet de normalisation du C++</A> est la page o&ugrave; vous trouverez toutes les informations qui font autorit&eacute;. Vous y trouverez les derni&egrave;res versions des documents de normalisation du C++. La version officielle de la norme n'est pas librement disponible, car il faut l'acheter pour l'obtenir. Vous trouverez &eacute;galement une copie de la derni&egrave;re version librement accessible du projet de normalisation sur <A HREF="cours/drafts/index.html">ici</A>.</P> <P>Vous pourrez vous renseigner et r&eacute;cup&eacute;rer le compilateur Borland C++ 5.5.1 (gratuit en ligne de commande, uniquement pour Windows) ainsi que Kylix 3.0 sur le site de Borland&nbsp;: <A HREF="http://www.borland.com/">http://www.borland.com/</A>.</P> <P>Vous pourrez vous renseigner et r&eacute;cup&eacute;rer le compilateur Intel C++ 6.0 (gratuit pour les programmes non commerciaux, uniquement pour Linux) sur le site d'Intel&nbsp;: <A HREF="http://www.intel.com/">http://www.intel.com</A>.</P> <P>Vous pourrez r&eacute;cup&eacute;rer le SDK de Windows sur le site de Microsoft&nbsp;: <A HREF="http://www.microsoft.com/">http://www.microsoft.com</A>.</P> <P>Vous pourrez trouver des informations sur GCC &agrave; l'adresse <A HREF="http://gcc.gnu.org/">http://gcc.gnu.org</A>.</P> <P>La version DOS se nomme DJGPP et peut &ecirc;tre r&eacute;cup&eacute;r&eacute;e &agrave; l'adresse <A HREF="http://www.delorie.com/">http://www.delorie.com</A>.</P> <P>La version Windows, nomm&eacute;e MINGW32, peut &ecirc;tre r&eacute;cup&eacute;r&eacute;e &agrave; l'adresse <A HREF="http://sourceforge.net/projects/mingw">http://sourceforge.net/projects/mingw</A>.</P> <P>La version modifi&eacute;e par Cygnus pour r&eacute;aliser des portages de programmes Unix sous Windows est disponible &agrave; <A HREF="http://sourceware.cygnus.com/cygwin">http://sourceware.cygnus.com/cygwin</A>.</P> <P>Pour ceux qui s'int&eacute;ressent &agrave; Java, vous pouvez visiter le site de Tony Soueid &agrave; l'adresse <A HREF="http://tonysoueid.multimania.com/">http://tonysoueid.multimania.com</A>. Vous y trouverez un cours clair et tr&egrave;s bien pour d&eacute;buter.</P> <P><BR><BR> </P> </BODY> </HTML> 
