INFO-F105 — Langages de programmation
TP 1 : Compilation en C++
Hakim Boulahya Arnaud Leponce Robin Petit
Renaud Vilain
Département d’Informatique
Faculté des Sciences
Université Libre de Bruxelles
Année académique 2022-2023
Table des matières
1. Description des TP’s
2. Outils informatiques pour les TP’s
1) C++
2) Assembleur
3. le C++
1) Historique
2) Description du C++
3) Les directives du préprocesseur
4) Le flux de sortie standard : cout
5) Le flux d’entrée standard : cin
4. Exercices
Table des matières
1. Description des TP’s
2. Outils informatiques pour les TP’s
3. le C++
4. Exercices
Description des TP’s
▶ Apprentissage du C++ et de l’assembleur
▶ 1 séance de 2h par semaine
▶ 3 projets
▶ examen écrit en juin et en août
▶ note = max(1/3 note des projets + 2/3 note à l’exam, note
de l’examen).
INFO-F105 1/30
Description des TP’s : Support
Les supports à votre disposition :
▶ le cours théorique ;
▶ le syllabus d’exercices ;
▶ les slides des TP’s ;
▶ les anciens projets et les anciens examens.
INFO-F105 2/30
Table des matières
1. Description des TP’s
2. Outils informatiques pour les TP’s
1) C++
2) Assembleur
3. le C++
4. Exercices
Outils informatiques : C++
Pour développer en C++, vous aurez besoin :
▶ d’un compilateur C++ ;
▶ d’un IDE.
Pour les environnements Unix, le compilateur est g++.
Pour les distributions Ubuntu-like :
sudo apt-get update
sudo apt-get install g++ libgcc-dev gcc-multilib
Pour les distributions Fedora-like :
sudo dnf update
sudo dnf install g++ glibc-devel* libstdc++-devel*
INFO-F105 3/30
Outils informatiques : C++
Liste non exhaustive d’IDEs. Certains intègrent un compilateur.
CLion Code::Blocks Netbeans Sublime Text
Atom Eclipse Xcode VisualStudio
INFO-F105 4/30
Outils informatiques : Assembleur
Pour développer en assembleur, vous aurez besoin de SASM
qui intègre un IDE et un compilateur.
C’est un outil open source, gratuit et multiplateforme.
Lien : [Link]
INFO-F105 5/30
Table des matières
1. Description des TP’s
2. Outils informatiques pour les TP’s
3. le C++
1) Historique
2) Description du C++
3) Les directives du préprocesseur
4) Le flux de sortie standard : cout
5) Le flux d’entrée standard : cin
4. Exercices
Historique du C et C++
▶ C est un langage de programmation impératif généraliste,
de bas niveau. Inventé au début des années 1970 pour
réécrire UNIX, C est devenu un des langages les plus
utilisés, encore de nos jours. 1
1. [Link]
INFO-F105 6/30
Historique du C et C++
▶ C++ (apparu en 1983) est un langage de programmation
compilé permettant la programmation sous de multiples
paradigmes, dont la programmation procédurale, la
programmation orientée objet et la programmation
générique. Ses bonnes performances, et sa compatibilité
avec le C en font un des langages de programmation les
plus utilisés dans les applications où la performance est
critique. 2
2. [Link]
INFO-F105 7/30
Description du C++
▶ Comme tout langage, le C++ a sa propre syntaxe. Celle-ci
se base sur :
▶ la ponctuation ;
▶ l’utilisation de mots-clés ;
▶ l’utilisation de variables et constantes.
INFO-F105 8/30
Description du C++ : la ponctuation
▶ Le C++ est un langage basé sur la ponctuation (alors que
python est principalement basé sur l’indentation)
▶ tous les blocs (fonction, classe, code conditionnel, code
principal) sont délimités par des accolades ("{" et "}") ;
▶ toute instruction de déclaration de variable, d’assignation,
les échanges input output sont terminées par un
point-virgule (" ;").
INFO-F105 9/30
Description du C++ : les mots-clés
▶ Le langage C++ se base sur des mots-clés.
alignas, alignof, and, and_eq, asmun, auto, bitand, bitor, bool,
break, case, catch, char, char8_t, char16_t, char32_t, class,
compl, concept, const, const_cast, consteval, constexpr,
constinit, continue, co_await, co_return, co_yield, decltype,
default, delete, do, double, dynamic_cast, else, enum, explicit,
export, extern, false, float, for, friend, goto, if, inline, int, long,
mutable, namespace, new, noexcept, not, not_eq, nullptr,
operator, or, or_eq, private, protected, public, register ,
reinterpret_cast, requiresc, return, short, signed, sizeof,
static, static_assert, static_cast, struct, switch, template, this,
thread_local, throw, true, try, typedef, typeid, typename,
union, unsigned, using.
INFO-F105 10/30
Description du C++ : les variables et
constantes
Une variable ou une constante est caractérisée par :
▶ un nom : composé de chiffres, de lettres et du caractère _)
et commence toujours par une lettre ;
▶ un type ;
▶ une valeur.
Il existe le mot clé const pour indiquer qu’une variable est
constante (voir plus tard).
INFO-F105 11/30
Description du C++
▶ Le type d’une variable ou une constante peut être :
Type # bits min. Valeurs possibles
char 8 bits 0 à 255
short int 16 bits -32.768 à 32.767
unsigned short int 16 bits 0 à 65.535
int 32 bits -[Link] à [Link]
unsigned int 32 bits 0 à [Link]
float 32 bits 3.4 × 10−38 à 3.4 × 1038
double 64 bits 1.7 × 10−308 à 1.7 × 10308
...
INFO-F105 12/30
Description du C++ : Exemple
Syntaxe générale
1 /∗ directives du preprocesseur ∗/
2 # include < iostream >
3 using namespace std ;
4
5 /∗ declarations de CONSTANTES ∗/
6 /∗ declarations de fonctions et / ou de classes ∗/
7 void affiche_age ( int i ) {
8 cout << " Vous avez " << i <<" ans . " << endl ;
9 }
10 /∗ declaration du main ∗/
11 int main () {
12 int age ;
13 cout << " Taper votre age : " ;
14 cin >> age ;
15 affiche_age ( age ) ;
16 return 0;
17 }
INFO-F105 13/30
Description du C++ : préprocesseur
Les directives du préprocesseur :
▶ les includes (exemple : #include <iostream> pour inclure
la librairie d’input et d’output standard) ;
▶ les directives de macros : #define #undef
▶ les directives de compilation conditionnelle : #ifdef,
#ifndef, #else et #endif".
INFO-F105 14/30
Description du C++ : utilisation de
namespace
La déclaration d’utilisation d’un namespace est également est
également mise en début de fichier : using namespace std;
Toute la librairie standard C++ est définie dans son propre
espace de nom. Ainsi, il faut systématiquement utiliser le
préfixe std:: devant tous les éléments qui en sont issus :
1 std :: cout << " Hello " << std :: endl ;
Pour éviter cela, on "importe" le namespace standard dans le
fichier :
1 using namespace std ;
2 ...
3 cout << " Hello " << endl ;
INFO-F105 15/30
Description du C++ : Exemple
Syntaxe générale
1 /∗ directives du preprocesseur ∗/
2 # include < iostream >
3 using namespace std ;
4
5 /∗ declarations de CONSTANTES ∗/
6 /∗ declarations de fonctions et / ou de classes ∗/
7 void affiche_age ( int i ) {
8 cout << " Vous avez " << i <<" ans . " << endl ;
9 }
10 /∗ declaration du main ∗/
11 int main () {
12 int age ;
13 cout << " Taper votre age : " ;
14 cin >> age ;
15 affiche_age ( age ) ;
16 return 0;
17 }
INFO-F105 16/30
Description du C++ : cout
Le flux de sortie standard : cout
Le périphérique de sortie standard est généralement l’écran
d’affichage. cout est une instance de la classe std::ostream.
cout est utilisé pour produire une sortie sur le périphérique de
sortie standard. Les données devant être affichées à l’écran
sont insérées dans le flux de sortie standard à l’aide de
l’opérateur d’insertion (<<).
1 # include < iostream >
2 using namespace std ;
3
4 int main () {
5 cout << " texte a afficher " << endl ;
6 return 0;
7 }
INFO-F105 17/30
Description du C++ : cin
Le flux d’entrée standard : cin
Généralement, le périphérique d’entrée standard est le clavier.
cin est une instance de la classe std::istream et est utilisé
pour lire les entrées du périphérique d’entrée standard à l’aide
de l’opérateur d’extraction (>>).
1 # include < iostream >
2 using namespace std ;
3
4 int main () {
5 int age ;
6 cout << " Entrer votre age : " ;
7 cin >> age ;
8 cout << " Vous avez " << age << " ans " << endl ;
9 return 0;
10 }
INFO-F105 18/30
Table des matières
1. Description des TP’s
2. Outils informatiques pour les TP’s
3. le C++
4. Exercices
Exercice 1
1. Écrivez un programme qui affiche "Hello !" ;
2. Nommez le fichier source [Link].
INFO-F105 19/30
Exercice 2
Ouvrez un terminal et en ligne de commande, lancez le
compilateur g++ avec l’option --version afin d’obtenir la
version du compilateur. Le résultat peut ressembler à cela :
g++ (Ubuntu 4.8.2-19ubuntu1) 4.8.2
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying
conditions. There is NO warranty; not even for
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
INFO-F105 20/30
Exercice 3
Afin de compiler un fichier .cpp avec g++ on peut utiliser la
commande suivante :
g++ <[Link]> -o <output_executable_program>.
Par exemple vous pouvez utiliser la commande
g++ [Link] -o test
pour compiler le fichier source [Link] et créer l’exécutable
test.
1. Compilez le programme [Link] à l’aide du compilateur
g++, appelez votre programme hello. Si le compilateur
n’affiche pas de message d’erreur cela signifie que tout
s’est bien passé.
2. Lancez le programme à l’aide de la commande ./hello
dans le terminal.
INFO-F105 21/30
Exercice 4
1. Modifiez votre programme [Link] afin qu’il affiche :
"Hello, world." ;
2. Sauvegardez le fichier ;
3. Retournez dans le terminal ;
4. Relancez hello.
Qu’est-ce que votre programme vient d’afficher ? Pourquoi ?
Faites le nécessaire pour qu’en exécutant ./hello dans le
terminal on obtienne le message "Hello, world.".
INFO-F105 22/30
Exercice 5
1. Supprimez le fichier exécutable hello ;
2. retournez dans le fichier source [Link] et supprimez
le symbole ; à la fin d’une ligne ;
3. essayez de recompiler le programme,
qu’affiche le compilateur ? Peut-on lancer le programme
dans le terminal ?
4. Corrigez l’erreur et recompilez le programme.
INFO-F105 23/30
Exercice 6
Le compilateur g++ permet d’activer une série d’options.
1. Recompilez le programme [Link] avec les options
-Wall et -Wextra ;
2. vérifiez que votre programme s’exécute correctement ;
3. supprimez le fichier hello ;
4. retournez dans le code de [Link] et déclarez une
variable int x au début du main ;
5. recompilez le programme [Link] avec les options
-Wall et -Wextra une fois de plus.
Que veut dire le message affiché par le compilateur ? Le
fichier exécutable est-il créé ?
INFO-F105 24/30
Exercice 7
Écrivez un programme [Link] demandant à l’utilisateur 2
entiers et affichant ensuite leur somme.
INFO-F105 25/30
Exercice 8
1. Téléchargez le fichier [Link] depuis l’UV, ce fichier
contient des erreurs.
2. Compilez ce programme à l’aide de la commande
suivante : g++ -Wall -Wextra [Link] -o no_error
3. Corrigez les erreurs dans le code source afin que le
programme puisse être compilé sans que le compilateur
ne produise de warnings.
4. Exécutez ce programme avec différentes valeurs d’entrée :
▶ 8 et 4
▶ 16 et 3
▶ 5 et 0.
5. Expliquez les résultats.
INFO-F105 26/30
Exercice 9
Pour simplifier le processus de compilation des programmes de
grande taille et afin de ne pas devoir réécrire la ligne de
commande lançant la compilation d’un programme à chaque
fois, on utilise des Makefiles.
Voici la structure d’un Makefile très simple :
all: <nom du programme1> <nom du programme2>
<nom du programme1>: <fichier(s) necessaire(s) pour la
compilation>
<TAB> <la ligne de compilation>
<nom du programme2> : ...
...
INFO-F105 27/30
Exercice 10
1. Supprimez le fichier hello.
2. Créez un fichier vide et appelez le Makefile.
3. Créez le Makefile pour [Link] et compilez votre
programme.
4. Pour lancer un Makefile tapez make dans le shell.
5. Exécutez hello pour vérifier qu’il fonctionne.
6. Relancez le Makefile encore une fois. Qu’est-il est affiché
à l’écran ?
7. Modifiez le programme [Link] pour qu’il affiche "Hello,
world !".
8. Sauvegardez le fichier et retapez make en ligne de
commande.
Que s’est il passé ?
INFO-F105 28/30
Exercice 11
1. Modifiez le Makefile afin que l’on puisse l’utiliser pour
compiler [Link] et [Link].
2. Relancez le Makefile.
3. Essayez de lancer le Makefile en modifiant un des deux
programmes, ensuite en ayant modifié les deux
simultanément.
INFO-F105 29/30
Questions
Avez-vous des doutes, des questions ou des
problèmes ?
Merci de votre attention et de votre
participation
INFO-F105 30/30