Les outils de développement en langage C++
Sommaire Les étapes de réalisation d'un exécutable Le pré processeur La création d'un exécutable
Les étapes de réalisation d'un exécutable
Traitement des fichiers sources Sources C++ Pré processeur Compilateur Objets
Traitement des fichiers assembleur Sources assembleur Assembleur Objets
Création de l'exécutable Objets Objets Bibliothèque s Editeur de liens Exécutable
Le pré processeur
Présentation Programme autonome qui est lancé avant la compilation. Il modifie le texte source conformément aux directives. Directives : instructions commençant par le caractère #.
#include Remplacement par le fichier d'en-tête indiqué. <nom du fichier> : le répertoire des fichiers d'en-tête du système. "nom du fichier" : répertoire de travail.
1er fichier : fichier d'entête : les déclarations fichier source(cpp) : les définitions Fichier1.h int fct1 (); Fichier1.cpp int fct1 () { } Fichier1.o
2ème fichier : fichier d'entête : les déclarations fichier source(cpp) : les définitions Fichier2.h int fct2 (); Fichier2.cpp int fct2 () { } Fichier2.o
Programme principal : inclusions des fichiers d'entête Fichiermain.cpp #include "Fichier1.h" #include "Fichier2.h" void main () { val = fct1(); val2 = fct2 (); } Fichiermain.o
Réalisation de l'exécutable Fichier1.o Fichier2.o Fichiermain.o Fichier.exe
#define : remplacement d'une constante En langage C pas constantes Remplacement d'une chaîne de caractères par une valeur. Exemple : #define MARDI 2 if (jour == MARDI) devient après passage dans le pré processeur if (jour == 2)
#define : les macros Répétition de code très court : utilisation de macros et non de fonctions. Exemple : #define MIN(x,y) (((x) < (y)? (x) : (y)) minimum = MIN (a, b); minimum = (((a) < (b)? (a) : (b))
Effets de bord des macros #define SURFACE (a, b) ((a) * (b)) #define RECTANGLE (a, b) a * b void main () { int r, s, t, u, s1, s2; r = 1; s = 2; t = 3; u = 4; s1 = SURFACE (r+s, t+u); s2 = RECTANGLE (r+s, t+u); cout << "Surface : " << s1 << endl; cout << "Rectangle : " << s2 << endl; }
Effets de bord des macros Résultat : Surface : 21 Rectangle : 11 Pourquoi? s1 = ((r+s) * (t+u); s2 = r+s * t+u; Donc ne pas oublier les parenthèses
#define : la compilation conditionnelle N'inclure un morceau de code que dans certaines condition. Condition possible : symbole défini ou non ou selon sa valeur. Exemples : #define DEBUG // DEBUG est défini #define NIVEAU 4 est 4 // le niveau de traitement
La compilation conditionnelle #ifdef SYMBOLE // code compilé si SYMBOLE est défini #else // code compilé si SYMBOLE n'est pas défini #endif
La compilation conditionnelle #if <condition sur le SYMBOLE > // code compilé si SYMBOLE vérifie la condition #else // code compilé si SYMBOLE ne vérifie pas la condition #endif
Compilation conditionnelle pour les tests Pour le déboguage : #ifdef _DEBUG cout << "Message de déboguage" << endl; #endif Pour le test : #if 0 // code non compilé donc non exécuté #endif
La compilation conditionnelle pour les fichiers d'entête // Fichier A #include "b.h" #include "c.h" // Fichier b.h #include "c.h" Le fichier c.h est inclus 2 fois -> erreur
La compilation conditionnelle pour les fichiers d'entête #if!defined(moteur_h INCLUDED) ( ou #ifndef (MOTEUR_H INCLUDED) ) #define MOTEUR_H INCLUDED Inclus que si MOTEUR_H_INCLUDED non défini #endif
Autres directives #undef : le symbole n'est plus défini #pragma : exploitation de propriétés spécifiques #error : message d'erreur #line : génère dans le texte des numéros de ligne utilisés pour les références croisées destinées au déboguage dans les programmes répartis sur plusieurs fichiers.
La création d'un exécutable
Etapes Pour la création d'un exécutable, deux étapes sont nécessaires : création de fichiers objets ; création d'un exécutable à partir de ces objets et des bibliothèques.
La compilation Création d'un fichier objet à partir d'un fichier source en langage évolué tel que les langages C++, Ada, Pascal, Cobol, Fortran, Fichier objet : fichier contenant du langage machine (octets chargés lors de l'exécution d'un programme). Fichier non exécutable.
L'assemblage Similaire à la compilation. Le logiciel qui réalise l'assemblage s'appelle également un assembleur (langage proche du langage machine). Cross-assembleur : crée un objet à partir d'un langage assembleur autre.
Les bibliothèques Fichiers objets concaténés dans un seul fichier. Bibliothèques système : fournies avec l'environnement de développement. Bibliothèques propres : créées par le programmeur.
DLL DLL (Dynamic Link Library) : chaînées que lors de l'exécution. Mémoire DLL Exécutable 1 Exécutable 2
L'édition de liens Elle crée l'exécutable : elle réalise les liens entre les différents objets et les bibliothèques (références sur les fonctions, ). Tous les objets, toutes les bibliothèques nécessaires -> l'exécutable.
Projet Sous Visual C++ : projet Sous linux : fichier makefile Projet : liste des fichiers sources et des bibliothèques pour créer l'exécutable.
Langages interprétés Un logiciel appelé interpréteur va lire chaque ligne du fichier source, va l'interpréter puis va l'exécuter. Pour de petits programmes. De moins en moins de langage sont interprétés. Langage Java : semi-interprété