I. Le langage C++
1. Première approche du C/C++
1.1. Les ordinateurs, les langages et le C++
1.1.1. Les ordinateurs et la programmation
1.1.2. Les langages de programmation
1.1.3. Le langage C/C++
1.1.4. Les outils de programmation
1.2. Notre premier programme
1.2.1. Hello World!
1.2.2. Analyse du programme
1.2.3. Généralisation
1.3. Les commentaires en C/C++
1.4. Les variables
1.4.1. Définition des variables
1.4.2. Les types de base du C/C++
1.4.3. Notation des valeurs.
1.4.3.1. Notation des valeurs booléennes
1.4.3.2. Notation des valeurs entières.
1.4.3.3. Notation des valeurs en virgule flottantes
1.4.3.4. Notation des caractères
1.4.3.5. Notation des chaînes de caractères
1.5. Les instructions.
1.5.1. Les instructions simples
1.5.2. Les instructions composée
1.5.3. Les structures de contrô
1.6. Les fonctions et les procédures.
1.6.1. Définition des fonctions et des procédures
1.6.2. Appel des fonctions et des procédures
1.6.3. Notion de déclaration
1.6.4. Surcharge des fonctions
1.6.5. Fonctions inline
1.6.6. Fonctions statiques
1.6.7. Fonctions prenant un nombre variable de paramètres
1.7. Les entrées / sorties en C
1.7.1. Généralités sur les flux d’entrée / sortie.
1.7.2. Les fonctions d’entrée / sortie de la bibliothèque C
1.7.3. La fonction printf
1.7.4. La fonction scanf
2. Les structures de contrôle
2.1. Les tests
2.1.1. La structure conditionnelle if
2.1.2. Le branchement conditionnel.
2.2. Les boucles
2.2.1. La boucle for
2.2.2. Le while
2.2.3. Le do
2.3. Les instructions de rupture de séquence et de saut
2.3.1. Les instructions de rupture de séquence
2.3.2. Le saut
3. Types avancés et classes de stockage
3.1. Types de données portables
3.2. Structures de données et types complexes
3.2.1. Les tableaux
3.2.2. Les chaînes de caractères
3.2.3. Les structures
3.2.4. Les unions
3.2.5. Les champs de bits
3.2.6. Initialisation des structures et des tableaux
3.3. Les énumérations
3.4. Les alias de types
3.4.1. Définition d’un alias de type
3.4.2. Utilisation d’un alias de type
3.5. Transtypages et promotions
3.6. Les classes de stockage
4. Les pointeurs et références
4.1. Notion d’adresse
4.2. Notion de pointeur
4.3. Déréférencement, indirectio
4.4. Notion de référence
4.5. Lien entre les pointeurs et les références
4.6. Passage de paramètres par variable ou par valeur
4.6.1. Passage par valeur
4.6.2. Passage par variable
4.6.3. Avantages et inconvénients des deux méthodes.
4.6.4. Comment passer les paramètres par variable en C ?
4.6.5. Passage de paramètres par référence
4.7. Références et pointeurs constants et volatiles
4.8. Arithmétique des pointeurs.
4.9. Utilisation des pointeurs avec les tableaux
4.10. Les chaînes de caractères : pointeurs et tableaux à la fois !
4.11. Allocation dynamique de mémoire
4.11.1. Allocation dynamique de mémoire en C
4.11.2. Allocation dynamique en C++
4.12. Pointeurs et références de fonctions
4.12.1. Pointeurs de fonctions
4.12.2. Références de fonctions
4.13. Paramètres de la fonction main – ligne de commande
4.14. DANGER
5. Le préprocesseur C
5.1. Définition
5.2. Les directives du préprocesseur
5.2.1. Inclusion de fichier.
5.2.2. Constantes de compilation et remplacement de texte
5.2.3. Compilation conditionnelle
5.2.4. Autres directives
5.3. Les macros
5.4. Manipulation de chaînes de caractères dans les macros.
5.5. Les trigraphes
6. Modularité des programmes et génération des binaires
6.1. Pourquoi faire une programmation modulaire ?.
6.2. Les différentes phases du processus de génération des exécutables
6.3. Compilation séparée en C/C++
6.4. Syntaxe des outils de compilation
6.4.1. Syntaxe des compilateur
6.4.2. Syntaxe de make
6.5. Problèmes syntaxiques relatifs à la compilation séparée
6.5.1. Déclaration des types
6.5.2. Déclaration des variables
6.5.3. Déclaration des fonctions
6.5.4. Directives d’édition de lien
I. Le langage C++
Tout le début de cette partie (chapitres 1 à 6) traite des fonctionnalités communes au C et au C++, en insistant bien sur les différences entre ces deux langages. Ces chapitres présentent essentiellement la syntaxe des constructions de base du C et du C++. Le début de cette partie peut donc également être considéré comme un cours allégé sur le langage C. Cependant, les constructions syntaxiques utilisées sont écrites de telle sorte qu’elles sont compilables en C++. Cela signifie qu’elles n’utilisent pas certaines fonctionnalités douteuses du C. Ceux qui désirent utiliser la première partie comme un cours de C doivent donc savoir qu’il s’agit d’une version épurée de ce langage. En particulier, les appels de fonctions non déclarées ou les appels de fonctions avec trop de paramètres ne sont pas considérés comme des pratiques de programmation valables.
Les chapitres suivants (chapitres 7 à 11) ne traitent que du C++. Les constructions utilisées pour permettre la programmation orientée objet, ainsi que toutes les extensions qui ont été apportées au langage C pour gérer les objets y sont décrits. Le mécanisme des exceptions du langage, qui permet de gérer les erreurs plus facilement, est ensuite présenté, de même que les mécanismes d’identification dynamique des types. Enfin, les notions d’espaces de nommage et de modèles de fonctions et de classes seront décrites. Ces dernières fonctionnalités sont utilisées intensivement dans la bibliothèque standard C++, aussi la lecture complète de la première partie est-elle indispensable avant de s’attaquer à la deuxième.
Chapitre 1. Première approche du C/C++
L’apprentissage d’un langage de programmation n’est pas chose aisée. Une approche progressive est nécessaire. Ce chapitre donnera donc les concepts de base de la programmation et présentera le langage C/C++ de manière pratique, à l’aide d’exemples de complexité progressive. Les notions plus complexes seront présentées dans les chapitres ultérieurs, une fois que l’on aura éliminé les premières appréhensions.
1.1. Les ordinateurs, les langages et le C++
1.1.1. Les ordinateurs et la programmation
Les ordinateurs sont des machines conçues pour être génériques et effectuer des opérations a priori non prévues lors de leur conception. Ils se distinguent en cela des machines conçues dans un but spécifique, afin de réaliser une tâche prédéterminée.
C’est cette généricité qui leur donne toute leur utilité. Si, dans certaines situations, des machines spécifiques sont particulièrement appropriées, notamment pour des raisons de performances, les ordinateurs sont incontournables dès lors que les tâches à accomplir sont diverses ou dès lors qu’elles sont nouvelles et n’ont pas de solution existante. C’est pour cette raison qu’ils sont particulièrement utilisés dans le monde de la simulation, où les développements spécifiques sont réalisés afin d’étudier le phénomène à observer. De même, ils sont utilisés pour modéliser et concevoir les machines spécifiques qui effectueront la tâche au final.
1.1.2. Les langages de programmation
La programmation directe d’un ordinateur n’est pas une tâche aisée, car les instructions élémentaires ne font réellement pas grand chose chacune. Afin de faciliter cette programmation, des logiciels complets ont été écrits. Les plus importants sont sans doute les systèmes d’exploitation, qui prennent en charge la gestion de l’ordinateur lui-même et fournissent des fonctionnalités de haut niveau, et les logiciels de langages de programmation, dont le rôle est de permettre de réaliser d’autres programmes à l’aide d’un langage de plus haut niveau que le langage de la machine cible. À présent, les systèmes et les logiciels des langages de programmation sont eux-mêmes programmés à l’aide des langages de programmation, si bien que la programmation directe des ordinateurs en langage machine n’est plus réservée que pour des applications très spécifiques ou lorsque de très grandes performances sont recherchées.
1.1.3. Le langage C/C++
Le C/C++ est un langage impératif compilé, du même type que le Pascal par exemple. C’est l’un des langages de programmation les plus utilisés actuellement. Il est à la fois facile à utiliser et très efficace. Il souffre cependant de la réputation d’être compliqué, illisible et, en raison de son aspect bas niveau, de permettre des bogues dans la gestion de la mémoire.
Cette réputation est en partie justifiée. La complexité du langage est inévitable lorsqu’on cherche à avoir beaucoup de fonctionnalités. La lisibilité des programmes en revanche ne dépend que de la bonne volonté du programmeur, et peut être améliorée à l’aide de conventions de codage simples.
Quant aux bogues bas niveau que le langage permet, ils sont la contrepartie d’un contrôle total du comportement du programme et donc de la machine. De plus, ils deviennent relativement rares avec l’expérience et peuvent également être grandement limités par l’utilisation de règles de codage simples.
1.1.4. Les outils de programmation
Quel que soit le type d’ordinateur et le type de système d’exploitation que vous utilisez, il existe certainement un compilateur C/C++ pour cette plateforme. Pour certains systèmes, le compilateur est un compilateur dit « croisé », c’est-à-dire un compilateur qui produit du code exécutable pour une autre machine que celle sur laquelle il fonctionne. Sur les plateformes les plus courantes, un choix abondant d’environnements de développement est proposé par les éditeurs de logiciels ou par la communauté des logiciels libres. Ces produits sont généralement de qualité, et ils sont à présent tous utilisables pour développer des applications C/C++, et souvent même dans d’autres langages.
1.2. Notre premier programme
Nous allons maintenant entrer dans le vif du sujet et présenter notre premier programme. L’usage en informatique est de faire un programme qui n’affiche qu’une ligne de texte et salue la compagnie : l’inévitable « Hello World! »..
Cours Informatique C/C++ (3121 KO) (Cours PDF)