Série 2 (Niveau 0):
Premiers pas en programmation
L'utlisation d'Emacs pour l'édition de programmes est décrite dans l'annexe A (page 389) de ce même livre.
Les mini-références des éditeurs du cours sont disponibles ici : pour Emacs et pour Geany.
Exercice 0 : mon premier programme
Les codes sources des programmes C++ sont, à l'instar de la plupart des langages de programmation, de simples fichiers texte. N'importe quel éditeur de textes permet donc d'écrire un programme en C++. Nous vous proposons d'utiliser votre éditeur favori (par exemple emacs, geany ou gedit), déjà utilisé au cours de la série 2. L'un des avantages de ces éditeurs est qu'ils possèdent un mode C++ agréable (ils présentent les programmes avec une mise en page et une coloration adaptées ; on appelle cela la mise en évidence syntaxique).
Le but de cet exercice est justement de vous apprendre, pas à pas, à
- éditer un programme ;
- compiler un programme c++ ;
- corriger les erreurs de compilation.
Étape 1 : Éditer un programme
À l'aide de votre éditeur favori (par exemple emacs, geany ou gedit), ouvrez (= créez) le fichier ~/myfiles/cpp/serie02/salut.cc.A l'aide d'Emacs
Via le raccourci Ctrl-x Ctrl-f ou par le menu File -> Open File...A l'aide de Geany
Créer un nouveau fichier via le raccourci Ctrl-n ou par le menu File -> New. Sauvegarder-le sous ~/myfiles/cpp/serie02/salut.cc à l'aide du raccourci Ctrl-s ou par le menu File -> Save.Attention :
- Prenez garde à ne pas ouvrir le même fichier à l'aide de deux éditeurs différents.
- Ne lancez pas plusieurs éditeurs pour ouvrir différents fichiers. Ouvrez tous les fichiers dans un seul et même éditeur.
Notes :
- Lorsque vous ouvrez un fichier dont le nom finit par .cc, votre éditeur favori (par exemple emacs, geany ou gedit) passe automatiquement en mode C++, et l'affiche dans la barre horizontale au bas de la fenêtre d'édition.
- L'éditeur crée automatiquement les fichiers qu'on lui demande de sauvegarder lorsque ceux-ci n'existent pas encore.
Tapez le petit programme suivant :
#include <iostream> using namespace std; int main() { cout << "Bonjour tout le monde !" << endl; return 0; }
Nous verrons plus tard dans le cours à quoi correspondent exactement toutes ces lignes, mais pour l'instant considérez cela comme la base minimale pour que votre programme fonctionne.
Cela devrait ressembler à quelque chose comme cela :
A l'aide d'Emacs
A l'aide de Geany
Remarques :
- Certains mots apparaissent colorés (si dans Emacs ce n'est pas le cas, essayez d'obtenir ce résultat en vous servant du menu Options ->Syntax Highlighting, et relisez la configuration d'Emacs comme indiqué dans la mini-référence Environnement Unix). Il s'agit de mots ayant des fonctions syntaxiques particulières, et leur couleur peut améliorer la lisibilité des programmes.
- Avec Emacs, lorsque vous appuyez sur la touche TAB, la ligne sur laquelle se trouve le curseur est indentée automatiquement, c'est-à-dire que des espaces sont ajoutés ou supprimés en début de ligne, de façon à rendre le programme plus lisible. Cette indentation automatique peut être utile pour déceler des erreurs de syntaxe : effacez par exemple le «;» de l'avant-dernière ligne du programme, puis placez-vous sur la dernière ligne et pressez la touche TAB. La position de l'accolade («}») doit vous faire comprendre qu'il y a une erreur dans la ligne précédente.
- Emacs: Ctrl-x Ctrl-s ou via le menu File -> Save (current buffer)
- Geany: Ctrl-s ou via le menu File -> Save
Annexe : structure du programme
- La première ligne (#include <iostream>) ordonne au compilateur de lire (et d'inclure) le contenu de la bibliothèque iostream avant de compiler le programme. Cette bibliothèque contient des définitions de commandes (et/ou variables) utilisées dans la suite du programme. Dans notre cas, il s'agit de la définition de cout, de la constante endl et du fonctionnement de l'opérateur <<.
- La seconde ligne est nécessaire pour indiquer au programme que vous allez utiliser les fonctions de la bibliothèque standard (std). Nous verrons plus tard dans le cours le rôle et l'utilisation de ces éléments appelés «espaces de noms» (namespaces).
- La cinquième ligne (en comptant les lignes vides) indique le début du programme. Les instructions comprises entre l'accolade ouvrante { et l'accolade fermante associée } constituent la définition du programme principal (la fonction main), c'est-à-dire les instructions qui seront effectivement exécutées au lancement du programme (c'est-à-dire à l'invocation de la fonction main).
- La sixième ligne affiche «Bonjour tout le monde !» à l'écran, suivi d'un retour à la ligne (endl).
Étape 2 : compiler le programme
Avant d'être exécuté, un programme C++ doit être compilé : le fichier texte contenant le code source doit être traduit en langage machine. On effectue cette opération à l'aide d'une commande de compilation (c.f. la mini-référence premiers pas en C++), qui peut être tapée dans une fenêtre Terminal, ou obtenue depuis votre éditeur favori, comme nous vous le proposons dans cet exercice.
Remarque préliminaire : en fonction de la configuration de votre environnement et de l'éditeur que vous utilisez (lequel va appeler le compilateur, mais ne confondez pas les deux !!), il se peut que le compilateur vous donne à ce stade du cours des "Warning:" (message d'alerte, mais pas d'erreur fatale). Ignorez-les pour le moment, ces "Warning:" devraient disparaitre dans les semaines qui viennent (dans deux semaines exactement ;-) )
A l'aide d'Emacs
Avec la souris, cliquez sur le bouton Compile d'Emacs.
Le message suivant doit apparaître, dans une boîte de dialogue
ou dans la ligne de commande au bas d'Emacs (mini-buffer) :
Compile: make -k.
(Si vous avez suivi les instructions de la mini-référence
Environnement Unix
en ce qui concerne la configuration de votre éditeur, vous devriez obtenir
le message suivant :
«c++ -g salut.cc -o salut»,
il n'est pas nécessaire dans ce cas de modifier la commande de compilation
comme indiqué ci-après)
Dans la boîte de dialogue, cliquez sur Edit command. Dans le
mini-buffer (au bas de la fenêtre Emacs), remplacez « make -k » par « c++ salut.cc -o salut
» puis pressez la touche Entrée
(i.e. Enter, ou Return).
Remarquez que cette opération n'est nécessaire que lors de la première compilation
de votre programme.
Si vous n'avez pas sauvegardé le fichier, Emacs vous demande alors l'autorisation de le faire maintenant (appuyez sur y pour confirmer).
La fenêtre se sépare en deux, et le buffer du dessous montre les messages de compilation. Attendez jusqu'à voir apparaître un message indiquant la fin de la compilation.
Si le buffer de compilation n'apparaît pas, ou qu'il disparaît à la suite de manipulations, affichez-le en le sélectionnant dans le menu Buffers. On rappelle aussi (voir la mini-référence sur l'environnement Unix) que l'on peut séparer une fenêtre en deux buffers en tapant Ctrl-x 2 (tandis que Ctrl-x 1 à l'effet inverse).
Si la compilation s'est déroulée sans problème (elle se termine avec le message «Compilation finished at ...»), testez votre programme : en utilisant un terminal, déplacez-vous (cd) si besoin est dans le répertoire ~/myfiles/cpp/serie02 et lancez votre programme en tapant
Le message «Bonjour tout le monde !» devrait alors apparaître.
A l'aide de Geany
- Vous rendre dans le menu Build -> Set build commands
- Dans la colonne C++ commands, rajouter
-std=c++11
aprèsg++
dans les deux lignes Compile et Build :g++ -std=c++11 -Wall ...
(attention aux espaces avant et après !)
Valider ensuite pour enregistrer les modifications.
Si vous n'avez pas sauvegardé le fichier, Geany le sauvegardera automatiquement pour vous. Le buffer du dessous montre les messages de compilation. Attendez jusqu'à voir apparaître un message indiquant la fin de la compilation :
Si la compilation s'est déroulée sans problème (elle se termine avec le message «Compilation finished successfully.»), testez votre programme : en utilisant un terminal, déplacez-vous (cd) si besoin est dans le répertoire ~/myfiles/cpp/serie02 et lancez votre programme en tapant
Vous pouvez aussi exécuter votre programme dans geany : dans le menu Build, choisir Execute ou utiliser le raccourci clavier F5.
Vous pouvez également tester votre programme directement depuis Geany en cliquant sur le bouton Execute ou en utilisant le raccourci F5.
Étape 3 : erreurs de compilation
Nous allons maintenant nous intéresser à la correction des erreurs d'un programme, en tout cas celles que le compilateur peut détecter.Cela vous arrivera souvent, et le compilateur C++ est assez fort pour trouver des erreurs. Apprenez donc à les comprendre et si vous avez du mal, n'hésitez pas à poster sur le forum du cours !
Il existe divers types d'erreurs :
Les erreurs d'implémentation et d'algorithme seront étudiées plus tard dans le cours, d'un point de vue pratique (avec la mise en oeuvre de procédures de déverminage - i.e. utilisation de débogueur et de tests logiciels) plutôt que théorique (il existe en effet un certain nombre de tests formels, mais ce genre de technique est trop complexe pour être abordée dans ce cours d'introduction). Finalement, les erreurs de conceptions relèvent elles du domaine de l'ingénierie informatique (le «génie logiciel»), et ne seront elles non plus pas traitées dans ce cours. |
Pour commencer, introduisez volontairement une erreur de syntaxe dans votre programme (supprimez par exemple la dernière accolade ou le dernier point-virgule).
Relancez ensuite la compilation. Vous devriez obtenir un message indiquant le fichier où se trouve l'erreur (salut.cc), la ligne concernée, ainsi que le type d'erreur:
A l'aide d'Emacs
salut.cc:7: error: parse error at end of input
...
Compilation exited abnormally with code 1 at ...
Cliquez avec le bouton du milieu de la souris sur le message d'erreur : dans le buffer du programme, Emacs positionnera alors le curseur sur le fichier et la ligne concernés. Vous pouvez passer d'une erreur à la suivante au moyen de la combinaison de touches Ctrl-x ` (c'est-à-dire la touche "Control" et la touche "x" en même temps, puis ensuite la touche `, c'est-à-dire l'accent grave (backquote), ou en cliquant avec le bouton droit dans la fenêtre de compilation.
Corrigez l'erreur, et relancez la compilation (pour cela, il vous suffit de faire un clic droit dans la fenêtre de compilation, et de sélectionner Recompile dans le menu «popup» qui apparaît).
A l'aide de Geany
salut.cc:7: error: parse error at end of input
...
Compilation failed.
Cliquez avec la souris sur le message d'erreur et Geany positionnera alors le curseur sur le fichier et la ligne concernés. Vous pouvez passer d'une erreur à la suivante au moyen du menu Build -> Next Error.
Corrigez l'erreur, et relancez la compilation.
Retour à la série