Vous êtes sur la page 1sur 6

1.

1- Compiler et exécuter un premier programme en C++

1- Un premier programme en C++

2- Compilation et exécution

1- Un premier programme en C++

Le premier programme que propose le cours consiste à afficher "HelloWorld" dans l'invite de commandes. Le code

source pour une telle opération est le suivant :

#include<iostream>

using namespace std;

int main()

cout << "HelloWorld";

return 0;

Les sauts de lignes ou les tabulations ne sont pas nécessaires, de même que les espaces, sauf pour les lignes qui

commencent par # qui sont des instructions destinées au préprocesseur et les lignes qui commencent par // et qui servent à

introduire des commentaires. Ainsi, le code précédent est absolument équivalent à ce code :

#include<iostream>

using namespace std;int main(){std::cout << "HelloWorld";return 0;}

La séparation en différentes lignes ou l'introduction de tabulations ne sont faites que pour faciliter la lecture du code.

Noter que chaque instruction est terminée par ';', sauf celles destinées au préprocesseur. On remarque également la présence

des accolades qui séparent des blocs d'instructions.

Reprenons ce code ligne à ligne :

#include<iostream>

Les lignes qui commencent par # sont des instructions à destination du préprocesseur. Au chapitre 1.7, on détaillera
précisément le rôle du préprocesseur. On peut juste retenir pour l'instant qu'il est lancé au moment de la compilation du code,

avant l'étape de compilation effective. Ici, l'instruction consiste à inclure une librairie, la librairie iostream. L'inclusion de librairies

est en élément central en C++ (cf introduction). En incluant une librairie, on peut en utiliser les fonctions, les constantes et les

objets. Dans iostream i=>input, o=>output. La librairie permet donc de gérer des flux d'entrées et de sorties. Notamment elle

fournit un objet std::cout qui est un flux vers l'invite de commandes et qui permet d'écrire sur l'invite de commandes. L'insertion

du nom du fichier entre deux < > indique à la machine d'aller chercher ce fichier à un emplacement spécial, un emplacement où

sont présents un certain nombre d'autres fichiers sources pré-implémentés et prévus par la norme. En effet iostream est une

librairie de la norme C++ standard.

using namespace std;

L'instruction sert à spécifier que l'on utilise l'espace de noms std. De sorte, que si la machine trouve cout, et qu'elle ne peut

identifier cout ni comme un nom de variable, ni comme un nom de fonction, elle pourra tester si elle peut résoudre l'identifieur

(nom de fonction ou de variable) std::cout. Si on avait pas mis cette instruction, plutôt que cout << "Hello world";, il aurait fallu

mettre l'instruction std::cout << "Hello world";.

int main()

On annonce ici qu'on va définir la fonction main qui est la fonction principale du programme. Lors de l'exécution du programme,

le système d'exploitation appelle l'exécution de la fonction main(). Toute autre fonction exécutée dans le programme sera soit

appelée par main(), soit appelée par une fonction elle même appelée par main(), soit appelée par une fonction appelée par une

fonction appelée par main() etc.... La fonction main() renvoie un entier dans la norme C++.

cout << "HelloWorld";

Ici cout est un objet. Cet objet fait partie de la bibliothèque standard, on peut le manipuler puisqu'on a inclus la librairie iostream.

<< est un opérateur de redirection de sortie. L'objet cout est un flux de sortie vers l'interface courante utilisée par le

programmeur. En l'occurrence, l'invite de commandes sous Windows ou le shell sous Linux. Donc, l'instruction permet d'écrire

"HelloWorld" sur l'invite de commande ou le shell. L'instruction

std::cout << "HelloWorld";

aurait produit le même résultat. Par contre, si on n'avait pas précisé auparavant using namespace std;, on n'aurait pas eu le

choix, il aurait fallu utiliser la dernière instruction.

return 0;
Comme la fonction main() est déclarée comme renvoyant un entier, il faut lui faire renvoyer une valeur : 0 indique au système

appelant la fonction que l'exécution s'est déroulée sans erreur. Du point de vue du programmeur, il serait équivalent de

renvoyer n'importe quelle valeur entière. A noter que le code aurait pu fonctionner sans cette instruction.

Pour créer un fichier de code source à partir du code donné plus haut, on saisit le code qui est proposé plus haut et on

le saisit dans un éditeur de texte (notepad sous Windows, gedit sous Linux etc...). Il suffit ensuite d'enregistrer le fichier au

format cpp. Sous notepad, il faut donc bien mettre "T.cpp" (ne pas omettre les guillemets sous notepad) dans la barre de saisie

du nom de fichier.

Un premier fichier source a été crée. Il va maintenant falloir le compiler.

2- Compilation et exécution

Compilation et exécution sous Windows

La compilation consiste à produire un fichier exécutable à partir d'un fichier de code source (ou plusieurs fichiers de

code source). Plusieurs compilateurs sont disponibles. Dans ce qui suit, on propose d'en utiliser un qui est lié à un EDI

(Environnement de Developpement Intégré) librement disponible : Dev-C++.

Une fois cet EDI téléchargé, on peut l'utiliser pour ouvrir le fichier qui a été précédemment créé.
On constate que l'affichage se fait avec des couleurs, ceci pour faciliter la compréhension du code.

● En vert : les informations à destination du préprocesseur qui apparaissent en haut du document.

● En noir et gras : les mots clés du langage

● En noir les instructions (dont les mots clés du langage qui apparaissent en gras)

● En rouge les chaînes de caractères.

● En violet les valeurs

A partir de là, les modifications seront faites à partir de l'EDI, de même que la création de fichiers. Une fois le fichier de code

source ouvert dans le navigateur, on peut compiler ce code. Sous Dev-C++ cela se fait avec CTRL+F9 (ou via le menu). Un

fichier T.exe apparaît dans le même répertoire que le fichier source T.cpp. Reste à exécuter le code qui vient d'être produit.

Pour se faire, on utilise l'invite de commande (Démarrer-Accessoires).

Une commande est toujours un fichier (quelque soit le système d'exploitation). Si par exemple j'utilise la commande ping, elle

est comprise :

C:\Documents and Settings\utilisateur>ping 129.12.12.0

La commande ping a pour nom complet : c:\WINDOWS\system32\ping, on peut trouver le fichier qui correspond à la
commande. A un moment donné du temps, le système d'exploitation pointe sur un nombre de répertoires. Lorsqu'on appelle

une commande, un fichier exécutable, la machine cherche parmi tous les répertoires sur laquelle elle pointe et dans le

répertoire courant : c:\Documents and Settings\utilisateur dans la commande précédente. En général, le fichier exécutable n'est

pas dans un fichier que la machine explore par défaut. Donc, supposons que mon exécutable soit dans c:\CPP, pour l'exécuter,

je fais :

C:\Documents and Settings\utilisateur>c:\CPP\T

Ce qui exécute le code. Une autre solution consiste à se placer d'abord dans le répertoire c:\CPP :

C:\Documents and Settings\utilisateur>cd c:\CPP

C:\CPP>T

La première instruction cd c:\CPP : cd signifie "change directory" : on change le répertoire de référence pour avoir c:\CPP

comme nouveau répertoire de référence. Il suffit ensuite de taper le nom de l'exécutable.

Note : on aurait également pu lancer le fichier .exe en double cliquant dessus, mais la fenêtre d'exécution qui est ouverte par

Windows pour l'affichage de l'exécution est fermée dès que cette exécution est terminée. C'est pour cette raison que l'on ouvre

d'abord l'invite de commande.

Compilation et exécution sous Linux

On suppose que le compilateur classique gcc est installé sur la machine Linux (il s'agit du compilateur le plus présent

sur les machines Linux). On utilise le compilateur g++ (compilateur C++ qui fait partie de gcc).

On suppose que $PATH pointe effectivement sur le répertoire qui contient la commande g++. Donc, on invoque le

shell de commandes. On suppose que le fichier contenant le code est test.cpp (le même code que celui qui précède). On

suppose que le chemin complet de ce fichier est /home/dorat/test.cpp. A partir de là, deux solutions sont possibles :

SOL1 :

Soit on se place dans le répertoire qui contient le fichier :

cd /home/dorat/

Ensuite on peut lancer la compilation :

g++ test.cpp

Dans ce cas, on constate qu'un fichier a.out a été créé dans le répertoire courant. Pour l'exécuter :
./a.out

qui signifie : exécuter la commande a.out qui est dans le répertoire courant. L'exécution aura aussi pu être faite par :

/home/dorat/a.out

Dans ce cas, on donne le chemin absolu de la commande.

On peut vouloir donner un autre nom que a.out (ainsi qu'un autre chemin pour le fichier de destination) :

g++ test.cpp -o /home/dorat/executables/hello.out

Dans ce cas, le fichier exécutable créé sera /home/dorat/executables/hello.out

Ne reste plus qu'à voir le cas où on lance la compilation depuis un autre répertoire que celui dans lequel est le fichier. Dans ce

cas, depuis n'importe quel répertoire :

g++ /home/dorat/test.cpp -o /home/dorat/executables/hello.out

et son exécution depuis n'importe quel répertoire :

/home/dorat/executables/hello.out

Différents compilateurs

Il existe différents compilateurs pour une même plateforme. Ces différents compilateurs fonctionnent différemment et

ne donnent pas le même résultat. Certains sont plus exigeants que d'autres quand d'autres acceptent des syntaxes un peu plus

larges. Certains donnent plus d'indication sur les erreurs de compilation que d'autres.