# Programmation C-C++

Ce livre est en cours de copie depuis le site http://casteyde.christian.free.fr/cpp/cours/online/book1.html qui le fournit sous licence GFDL.
Cours de C/C++ :
| Le langage ||
| | Première approche |
| | Les structures de contrôle |
| | Types avancés |
| | Pointeurs et références |
| | Le préprocesseur |
| | Modularité et compilation |
| | Écrire du code illisible |
| | C++ : La couche objet |
| | C++ : Les exceptions |
| | Identification des types |
| | Les espaces de nommage |
| | Les templates |
| La bibliothèque standard ||
| | Notions de base |
| | Les types complémentaires |
| | Les flux d'entrée / sortie |
| | Les locales |
| | Les conteneurs |
| | Les algorithmes |
| Conclusion ||
| Priorités des opérateurs ||
| Draft Papers ||
| Bibliographie ||
| Livre original de C. Casteyde Modifier le modèle ||
Ce livre est un cours de C et de C++. Il s'adresse aux personnes qui ont déjà quelques notions de programmation dans un langage quelconque. Les connaissances requises ne sont pas très élevées cependant : il n'est pas nécessaire d'avoir fait de grands programmes pour lire ce document. Il suffit d'avoir vu ce qu'est un programme et compris les grands principes de la programmation.
Ce livre est structuré en deux grandes parties, traitant chacune un des aspects du C++. La première partie, contenant les chapitres 1 à 12, traite du langage C++ lui-même, de sa syntaxe et de ses principales fonctionnalités. La deuxième partie quant à elle se concentre sur la bibliothèque standard C++, qui fournit un ensemble de fonctionnalités cohérentes et réutilisables par tous les programmeurs. La bibliothèque standard C++ a également l'avantage d'utiliser les constructions les plus avancées du langage, et illustre donc parfaitement les notions qui auront été abordées dans la première partie. La description de la bibliothèque standard s'étend du chapitre 13 au chapitre 18.
Si la bibliothèque standard C++ est décrite en détail, il n'en va pas de même pour les fonctions de la bibliothèque C. Vous ne trouverez donc pas dans ce livre la description des fonctions classiques du C, ni celle des fonctions les plus courantes de la norme POSIX. En effet, bien que présentes sur quasiment tous les systèmes d'exploitation, ces fonctions sont spécifiques à la norme POSIX et n'appartiennent pas au langage en soi. Seules les fonctions incontournables de la bibliothèque C seront donc présentées ici. Si vous désirez plus de renseignements, reportez-vous aux spécifications des appels systèmes POSIX de l'OpenGroup, ou à la documentation des environnements de développement et à l'aide des kits de développement des systèmes d'exploitation (SDK).
Ce livre a pour but de présenter le langage C++ tel qu'il est décrit par la norme ISO 14882 du langage C++. Cependant, bien que cette norme ait été publiée en 1999, le texte officiel n'est pas librement disponible. Comme je ne veux pas cautionner le fait qu'un texte de norme international ne soit pas accessible à tous, je me suis rabattu sur le document du projet de normalisation du langage, datant du 2 décembre 1996 et intitulé « Working Paper for Draft Proposed International Standard for Information Systems -- Programming Language C++ ».
Notez que les compilateurs qui respectent cette norme se comptent encore sur les doigts d'une main, et que les informations et exemples donnés ici peuvent ne pas s'avérer exacts avec certains produits. En particulier, certains exemples ne compileront pas avec les compilateurs les plus mauvais. Notez également que certaines constructions du langage n'ont pas la même signification avec tous les compilateurs, parce qu'elles ont été implémentées avant que la norme ne les spécifie complètement. Ces différences peuvent conduire à du code non portable, et ont été signalées à chaque fois dans une note. Le fait que les exemples de ce livre ne fonctionnent pas avec de tels compilateurs ne peut donc pas être considéré comme une erreur, mais plutôt comme une non-conformité des outils utilisés, qui sera sans doute levée dans les versions ultérieures de ces produits.
Après avoir tenté de faire une présentation rigoureuse du sujet, j'ai décidé d'arranger le plan de ce livre dans un ordre plus pédagogique. Il est à mon avis impossible de parler d'un sujet un tant soit peu vaste dans un ordre purement mathématique, c'est-à-dire un ordre où les notions sont introduites une à une, à partir des notions déjà connues (chaque fonction, opérateur, etc. n'apparaît pas avant sa définition). Un tel plan nécessiterait de couper le texte en morceaux qui ne sont plus thématiques. J'ai donc pris la décision de présenter les choses par ordre logique, et non par ordre de nécessité syntaxique.
Les conséquences de ce choix sont les suivantes :
* il faut admettre certaines choses, quitte à les comprendre plus tard ;
* il faut lire deux fois ce livre. Lors de la première lecture, on voit l'essentiel, et lors de la deuxième lecture, on comprend les détails (de toutes manières, je félicite celui qui comprend toutes les subtilités du C++ du premier coup).