Program build


To translate this course in your native langage:

  • In Chrome: right-click anywhere on the page and select “Translate to…”

  • Or use this language selector:

Les mots colorés en anglais représentent des mots-clés de la norme du langage C++. Ils sont conservés à l’identique lors de l’utilisation d’une traduction automatique avec Google Translate. Exemple : l’héritage (inheritance) est un principe fondamental de C++.


Aperçu de la grammaire du C++

Lorsque le compilateur parcourt votre programme, il découpe le code source en différents éléments et analyse leur organisation. En pratique, l’essentiel d’un programme C++ se compose de commentaires, de directives du préprocesseur, de mots-clés, d’identifiants, de symboles et de littéraux. Nous les présentons plus en détail ci-dessous :

Les commentaires

Le C++ possède deux formes de commentaires (comments) :

// Commentaire sur une ligne

/*
   Commentaire
   sur plusieurs lignes
*/

Les commentaires servent uniquement aux programmeurs et ne sont pas pris en compte lors de l’analyse du code.

Les directives du préprocesseur

#include<string>

Les directives du préprocesseur (preprocessing directives) font partie du langage C++, mais elles sont traitées avant l’étape de compilation. Durant cette étape de prétraitement (preprocessing), elles sont repérées puis interprétées. Par exemple, la directive #include insère le contenu d’un fichier dans le code source actuel. Lorsque la compilation commence réellement, toutes les directives du préprocesseur ont été traitées et ne figurent plus dans le code source.

Les noms

Les noms donnés aux variables, fonctions, classes, etc. sont appelés des identifiants (identifiers). Un identifiant doit notamment respecter les règles suivantes :

  • Commencer par une lettre ou par le symbole underscore _

  • Ne pas contenir d’espace ni de caractère spécial

  • Ne pas être un mot-clé réservé

  • Respecter la casse : Total et total sont deux identifiants différents.

Les mots-clés

Un mot-clé (keyword) est un mot réservé par le langage. La liste des mots-clés est définie par la norme du langage. Chaque version du C++ dispose ainsi de sa propre liste de mots-clefs.

Les mots-clés jouent différents rôles. Par exemple :

  • true et false sont des littéraux booléens

  • bool, char, float, double, int représentent des types

  • if, for, while contrôlent le déroulement du programme

Les littéraux

Un littéral (literal) est une valeur écrite directement dans le code source. Il en existe plusieurs catégories :

  • Entiers : 4897, 0b110101010, 0xFF23

  • Flottant : 8.235

  • Booléens : true, false

  • Caractère : 'a'

  • Chaînes de caractères : "Bonjour"

Les symboles

Le C++ utilise de nombreux symboles appelés punctuators, par exemple :

!  %  ^  &  *  (  )  -  +  =  {  }  |  ~    [  ]  \  ;  '  :  "  <  >  ?  ,  .  /

On peut notamment rencontrer :

  • des délimiteurs, qui structurent certaines constructions : { } ( ) [ ] ;

  • des opérateurs : + - / = < >…

  • des types comme int & pour une référence vers un entier

Un même symbole peut avoir plusieurs significations selon le contexte. Prenons l’exemple des parenthèses :

  • a = fnt() : appel d’une fonction

  • 4 / (5 - a) : regroupement d’une expression

  • void fnt(int a) : contient les paramètres d’une fonction

Vous pouvez retrouver les différentes utilisations des ponctuateurs dans la documentation C++.

Indiquez si les affirmations suivantes sont vraies ou fausses :

  1. 8.235 est un littéral.

  2. for, while sont des mots-clefs du C++.

  3. On peut choisir int comme nom de variable.

  4. Le C++ est un langage non sensible à la casse.

  5. Une paire de parenthèses correspond toujours à un appel de fonction.

  6. Le développeur peut définir de nouveaux mots-clefs.

  7. Les accolades sont des signes du langage C++.

  8. La paire de parenthèses désigne uniquement un appel de fonction.

  • Donnez le terme C++ désignant la catégorie associée à x, sin(), vector - ne pas utiliser de majuscules :

  • Donnez le terme C++ désignant la catégorie associée à 4.22 true false - ne pas utiliser de majuscules :

La génération

Principe

La génération d’un programme (build) désigne le processus qui transforme les fichiers sources (texte) en programme exécutable sur une machine donnée. Ce processus repose deux étapes principales :

  • La compilation (compilation) : chaque fichier source (.cpp) est traduit en un fichier objet (object file) avec l’extension .obj sous Windows et .o sous Linux. Chacun de ces fichiers représente une portion du programme final. L’utilitaire accomplissant cette tâche s’appelle un compilateur (compiler).

  • La liaison (link) : les différents fichiers objets sont fusionnés pour obtenir le programme exécutable final. L’utilitaire effectuant cette tâche s’appelle un éditeur de liens (linker).

Le compilateur et l’éditeur de liens peuvent être des programmes distincts ou intégrés dans un même outil, cela n’a pas d’importance pour le processus.

Avertissement

Dans l’usage courant, on emploie souvent l’expression compiler un programme (compile a program) à la place de générer un programme. Cette confusion vient du fait que la compilation constitue l’étape la plus longue et la plus visible.

Voici un schéma qui représente le traitement des différents fichiers sources et des fichiers objets durant l’étape de Build :

../_images/_compil.png

Indépendance des fichiers sources

Chaque fichier source est compilé indépendamment : il n’a pas connaissance du contenu des autres fichiers. Cette approche permet de ne recompiler que les fichiers modifiés, ce qui accélère la génération du programme. En revanche, l’étape de liaison doit effectuée dans son intégralité à chaque fois.

Les erreurs

La compilation produit des erreurs de compilation (compile-time errors), liées à la syntaxe et localisées précisément dans les fichiers sources.

L’étape de liaison produit des erreurs de liaison (linker errors). Par exemple, appeler une fonction dont la définition est absente du programme provoque une erreur de liaison.

Outils de build

Pour exécuter ce processus, plusieurs approches sont possibles :

  • Exécuter manuellement les commandes dans un terminal,

  • Utiliser un utilitaire (comme Make ou CMake) qui automatise le build à l’aide de fichiers de configuration,

  • Recourir à un environnement de développement (IDE) permettant de lancer le build en un clic (Visual Studio).

Indiquez si les affirmations suivantes sont vraies ou fausses :

  1. L’étape de compilation traduit un fichier objet en fichier exécutable.

  2. Si vous avez 3 fichiers .cpp et un fichier .exe, vous aurez 4 fichiers objets.

  3. L’étape de liaison a lieu avant l’étape de compilation.

  4. Un fichier source est recompilé lorsqu’il est mis à jour.

  5. Un build représente la traduction du code source en programme exécutable.