Outils d'utilisateurs

Outils du Site


votre_premier_programme

Ceci est une ancienne révision du document !


manipuler des chaines de caractères (prochain chapitre, avec les variables)

Premiers programmes en C++

Dans ce chapitre, vous allez entrer enfin dans le vif du sujet et écrire vos premiers programmes en C++. Le but sera d'avoir un aperçu du processus de compilation, d'afficher des messages et de faire quelques calculs simples.

Programme C++ minimal

Créer une application en C++ n'est pas très compliqué. Commençons par voir un code C++ minimal, qui permet de créer un programme qui ne fait rien. Même s'il ne fait rien, nous allons pouvoir aborder quelques notions importantes.

Tester l'environnement de compilation en ligne

Pour commencer, revoyons les étapes pour lancer un programme sur l'éditeur en ligne que vous allez utiliser dans ce cours (vous avez déjà réalisé cette procédure le chapitre comment_realiser_les_exercices_de_ce_cours pour tester les codes d'exemple). Cliquez sur le lien suivant, avec le bouton droit de la souris et choisissez “Ouvrir le lien dans un nouvel onglet” : Tester le code C++ minimal. Ce lien permet d'ouvrir un environnement de développement en ligne, qui contient un éditeur pour écrire le code C++ et un compilateur pour transformer votre code C++ en programme exécutable.

La nouvelle fenêtre ressemble à l'image suivante :

Cette fenêtre se décompose en deux parties. De haut en bas :

  • le code du programme ;
  • le résultat de la compilation et l'exécution.

Pour le moment, vous ne pouvez pas modifier ce code, cette fenêtre est en fait une simple archive du code qui a été créé pour ce cours. Pour pouvoir modifier et tester ce code, vous devez cliquer sur le bouton “Edit” en bas à droite de la fenêtre.

L'aspect de le fenêtre change pour ressembler à l'image suivante :

Cette nouvelle fenêtre contient maintenant trois parties. De haut en bas :

  • Dans la partie du haut, l'éditeur de code, qui contient le code C++ de votre programme. Contrairement à l'étape précédente, vous pouvez maintenant modifier ce code en cliquant dessus et en tapant le code sur le clavier.
  • La partie centrale grise, le résultat de la compilation et de l’exécution du programme. Pour le moment, comme vous n'avez pas lancé le programme, cette partie est vide.
  • Dans la dernière partie, les instructions pour la compilation et l'exécution du programme.

Pour lancer la compilation et l'exécution, il vous suffit de cliquer sur le bouton “Compile, link and run…” en bas à droite. Si vous le faite, vous verrez que l'éditeur change de couleur quelques instants, mais rien ne change dans partie centrale grise.

La raison est simple. Le code minimal donné ne fait rien et donc rien ne s'affiche, ce qui donne l'impression que rien ne se passe. Mais faites une petite modification du code (n'importe quoi, c'est pour tester) et relancer la compilation, vous verrez des messages s'afficher dans la partie grise :

Même sans comprendre ce qui se passe, vous pouvez voir un mot dans la partie grise qui n'est pas compliqué à comprendre : “error”. Normal, puisque l'on écrit n'importe quoi dans le code, cela est compris comme une erreur !

Vous allez apprendre à écrire du code C++ correcte dans la suite de ce cours, mais avant cela, vous devez comprendre les bases de la compilation d'un code C++ et de l'exécution d'un programme.

La compilation d'un code C++

Fondamentalement, une application est une suite d'instructions donnée au processeur de votre ordinateur, qui lui indique les tâches qu'il doit accomplir. Un processeur ne connait qu'un seul langage, appelé langage machine, spécifique à chaque type de processeur. Un langage machine est difficilement compréhensible pour les humains et il est donc très peu utilisé. C'est pour cela que les programmes sont écrit dans des langages plus compréhensibles comme le C++. Le problème est que le processeur est incapable de comprendre autre chose que le langage machine, en particulier, dans le cas qui nous intéresse, le C++.

La compilation est le processus qui transforme le code C++ en programme en langage machine.

Cette étape est donc indispensable pour tester vos programmes écrit en C++. La compilation est en fait constituée de plusieurs étapes (qui seront détaillées dans un prochain chapitre), chaque étape nécessitant l'utilisation d'un programme dédié. Vous verrez également dans un prochain chapitre différents outils de compilation, comment les installer et les utiliser. C'est pour éviter les problèmes liés à l'installation et l'utilisation de ces outils que vous utilisez dans un premier temps dans ce cours un environnement de compilation en ligne, qui possède déjà tous ces outils.

Langage compilé et langage interprété

Il existe historiquement deux types de langage de programmation : les langages compilés et les langages interprétés. Les premiers nécessitent une étape de compilation (comme vous venez de le voir pour le C++), qui transforme un code en programme compréhensible pour le processeur. Une fois que le programme est compilé, il n'y a plus besoin du compilateur pour être exécuté. Les seconds utilisent un interpréteur, qui exécutent directement le code, chaque instruction du code étant convertie directement en instructions en langage machine lors de l'exécution. L'interpréteur est nécessaire lors de l'exécution du programme, ce qui ralentie son exécution.

De nos jours, cette distinction n'est plus forcement pertinente. En effet, beaucoup de langages peuvent être utilisés via compilation et interprétation, voir même un mélange de deux.

Revenons sur le compilation de notre code C++ minimal. Dans l'éditeur utilisé, la compilation est réalisée en suivant les instructions données dans la partie du bas de la fenêtre. Cette partie (que vous pouvez également modifier) contient les instructions suivantes :

clang++ -std=c++11 -Wall -Wextra -pedantic -O2 main.cpp && ./a.out

Ces instructions sont en fait des commandes Linux (le serveur utilisé par l'éditeur tourne sous Linux). Si vous ne connaissait pas Linux, ce n'est pas très important pour réussir à compiler des programmes en C++, même sur Windows ou Mac. Vous pourrez utiliser par la suite des outils qui se chargeront d'appeler ces instructions pour vous, de façon transparente. Mais garder quand même en mémoire que quelque soit l'outil que vous utiliserez, celui-ci ne fera rien d'autre que d'appeler ces instructions, comme vous pourriez le faire vous-même (certain préfèrent d'ailleurs écrire ces instructions de compilation à la main).

Les instructions suivantes réalisent en fait deux tâches : lancer la compilation puis lancer l'exécution. Chaque étape est séparée par l'opérateur && ou par un retour à la ligne. Ainsi, le code précédent peut également s'écrire :

clang++ main.cpp -std=c++1y -Wall -Wextra -pedantic -O2
./a.out

Remarque : dans l'éditeur, pour ajouter un retour à la ligne dans la partie du bas, il faut appuyer sur les touches Shift + Entrée du clavier. Appuyer simplement sur la touche Entrée lance la compilation et l'exécution.

La première ligne, qui nous intéresse pour le moment, permet de lancer la compilation. Voyons ces instructions en détail :

  • la commande clang++ permet de lancer un programme de compilation (compilateur) appelé Clang. Ce compilateur est gratuit et l'un des plus à jour pour le support du C++. L'éditeur Coliru permet d'utiliser un autre compilateur appelé GCC, que vous pouvez appeler en remplaçant clang++ par g++-4.8.
  • la valeur main.cpp est le nom du fichier à compiler. Par défaut, le code dans l'éditeur Coliru est enregistré dans ce fichier, il faut donc indiquer à Clang qu'il doit compiler ce fichier.
  • les restes des valeurs correspondent aux options de compilation. Elles permettent de spécifier à Clang comment il doit compiler le code. Il existe plusieurs centaines d'options de compilation, il ne sera pas possible de toutes les détailler. Pour résumer les options utilisées ici, sachez que l'option -std=c++1y permet d'activer le support de la norme la plus récente du C++, les options -Wall -Wextra -pedantic permettent de vérifier les erreurs dans vos codes et l'option -O2 permet d'optimiser le programme généré.

Il est important de connaître le processus et les options de compilation, cela sera détaillé dans la suite du cours. Cependant, pour les codes d'exemple et les exercices donnés dans ce cours, les instructions de compilation seront données, vous n'aurez pas besoin de les modifier.

Pour en savoir plus sur ces compilateurs, vous pouvez consulter les pages correspondantes de Wikipédia : Clang et GCC. Vous pouvez également consulter les sites officiels : Clang et GCC, en particulier les documentations pour connaître les options de compilation utilisables.

L'exécution d'un programme C++

Par défaut, le programme généré par la compilation s'appelle a.out. L'instruction ./a.out permet donc de lancer son exécution. Il est possible de changer le nom du programme généré en utilisation l'option -o avec Clang, par exemple :

clang++ main.cpp -o mon_programme -std=c++1y -Wall -Wextra -pedantic -O2
./mon_programme 

Revenons maintenant sur le code C++ de notre programme. Ce code minimal permet de définir une fonction appelée main, qui ne fait rien :

int main() {
}

pas clair…

Une fonction est une suite d'instructions C++ qui peut être appelée par qui ? .

La fonction main est un peu particulière puisse qu'elle est appelée par le système d'exploitation. Elle est obligatoire dans un programme, si vous ne créez pas de fonction main ou si vous en créez plusieurs, le système d'exploitation ne saura pas comment lancer votre application et produira une erreur. Par contre, vous ne pouvez pas vous-même appeler cette fonction, seule le système peut l'appeler.

Vous apprendrez par la suite à créer des fonctions et leurs syntaxes en détail, mais pour comprendre la fonction main, voici quelques explications. Comme indiqué ci-dessus, une fonction est une suite d'instructions qui peut être appelée. L'appel de fonction se déroule en trois étapes :

  • l'appelant appelle la fonction à partir de son nom, en lui transmettant des informations si besoin ;
  • la suite d'instruction est exécutée ;
  • la fonction se termine en transmettant éventuellement une réponse et l'exécution reprend dans l'appelant.

Ces trois étapes apparaissent dans la déclaration d'une fonction, avec la syntaxe suivante :

InformationsRetournées NomDeLaFonction(InformationsEnvoyées) BlocDeCode
  • La déclaration d'une fonction commence par définir les informations retournée par le fonction (encore appelé paramètre de retour de la fonction) lorsqu'elle se termine. Dans la cas de la fonction main, celle-ci retourne toujours une information de type int, qui signifie un nombre entier (integer en anglais).
  • Ensuite vient le nom de la fonction, main dans ce cas.
  • Les informations d'entrée sont définies à la suite du nom de la fonction, entre parenthèses. Lorsqu'il n'y a pas d'informations envoyées, il faut mettre les parenthèses avec rien dedans.
  • La fonction se termine en indiquant la suite d'instructions dans un bloc de code. Chaque instruction se termine par un point-virgule, un bloc est encadré par des accolades. Dans notre code d'exemple minimal, le bloc d'instruction est vide, il n'y a que les accolades.

Dans le cas de la fonction main, les paramètres d'entrée et de retour de la fonction sont définie par la norme du langage et ne peuvent pas prendre n'importe quelle forme. Dans la majorité des cas, vous n'utiliserez que les deux syntaxes suivantes :

int main() {}
int main(int argc, char* argv[]) {}

La seconde syntaxe permet d'envoyer des informations au programme lors du lancement de l'application. L'utilisation de ces arguments sera détaillée dans la suite de ce cours.

Le schéma suivant résume les étapes de compilation et d'exécution :

Mise en forme du code

Dans un code C++, les espaces et les retours à la ligne ne sont pas pris en compte dans la compilation (sauf bien sûr si vous accoler deux termes ensembles, comme par exemple écrire intmain sans espace, ce qui ne sera pas compris pas le compilateur). Vous pouvez donc ajouter des espaces et des retours à la ligne de façon à rendre votre code le plus lisible possible, sans que cela ne change votre programme.

Un code sera plus souvent lu qu'il ne sera écrit. Prendre le temps de le présenter correctement permet de gagner du temps au final.

Ainsi, le programme d'exemple peut s'écrire selon le façon suivante :

int main(){}
int
main()
{
}
int     main     (     )     {     }

En pratique, pour qu'un code soit facilement lisible par plusieurs personnes, il est possible de définir des règles d'écriture du code. Il existe plusieurs conventions pour ces règles, à vous de choisir celles qui vous convient.

Peu importe les règles de codage que vous choisissez, le plus important est surtout d'avoir des règles et de les respecter.

En particulier, un point important est le respect de l'indentation. L'indentation correspond aux espaces placés en début d'une ligne. Le début des lignes doit être alignés selon leur niveau hiérarchique.

Vous trouverez des exemples de styles d'indentation du code dans la page de Wikipédia correspondante. Dans ce cours, j'utiliserais le style K&R.

Il existe des outils permettant de mettre en forme le code et vérifier que la présentation du code respect les règles que vous avez fixé. Ces outils seront présentés dans la suite de ce cours.

Commentaires du code

Dans la majorité des cas, les noms utilisés dans vos codes seront suffisant pour pouvoir comprendre ce qu'ils sont sensé faire (en fait, il faudra choisir des noms suffisamment clairs pour rendre le code compréhensible). Mais parfois, cela ne sera pas suffisant, il faudra ajouter des commentaires dans le code, qui ne sont pas lues par le compilateur et sont destinées uniquement aux développeurs.

Il existe deux formes de commentaires, les commentaires sur une ligne et les commentaires sur plusieurs lignes. Les commentaires peuvent être placé n'importe où dans votre code. Pour écrire un commentaire sur un ligne, vous devez utiliser deux barres obliques suivie du commentaire. Pour un commentaire sur plusieurs lignes, il faut commencer le commentaire par une barre oblique puis un astérisque /* et terminer le commentaire par un astérisque puis une barre oblique */. <code cpp> un commentaire sur une ligne

int main() { un commentaire à la fin d'une ligne /* un commentaire sur plusieurs lignes */ } </code> ==== Exercices ==== === Compilation et exécution === Dans les commandes de compilation et d'exécution, il est possible d'utiliser la commande echo suivie d'un texte pour afficher un message. * Modifier les instructions de compilation pour afficher un message avant la compilation et un autre avant l'exécution : <code> Compilation du programme C++ Exécution du programme C++ … </code> * Modifier le code de compilation pour compiler deux fois le programme, avec les options d'avertissement et sans les options d'avertissement : <code> Compilation du programme C++ avec les avertissements Compilation du programme C++ sans les avertissements Exécution du programme C++ … </code> * Modifier le code de compilation et d'exécution pour nommer le programme “mon_programme” au lieu de “a.out”. === La fonction main === En fait, en plus des deux syntaxes possible pour la fonction main, il existe une troisième syntaxe. * Trouvez dans la documentation du langage C++ la page correspondant à la fonction main. * Trouvez ensuite la troisième syntaxe possible pour la fonction main. * Il est courant d'écrire au début de chaque code la licence d'utilisation du code, les coordonnées de l'auteur, la date de modification et d'autres informations utiles. Modifier le code de la fonction main pour ajouter ces informations sous forme de commentaires. ===== Le programme “hello world” ===== Tester ce code Utilisez iostream et cout et «. Plusieurs « pour chainer les messages ==== Exercices ==== Modifier le code suivant pour afficher les messages demandés. Faire l'exercice <code cpp main.cpp> #include <iostream> int main() { Modifier la ligne suivante pour afficher “Bienvenue tout le monde !”

  std::cout << "Hello, world!" << std::endl;
  
  // Ajouter UNE ligne pour afficher "Bienvenue !" et "Tout le monde !" sur DEUX lignes
  std::cout << @@@@
  
  // Ajouter DEUX lignes pour afficher "Bienvenue !" et "Tout le monde !" sur UNE ligne
  std::cout << @@@@
  std::cout << @@@@
  
  return 0;

} </code>

Explications sur ce premier code source

Lorsque Code::Blocks crée un nouveau projet, il génère un fichier main.cpp contenant ce code :

#include <iostream>
 
using namespace std;
 
int main()
{
    cout << "Hello world!" << endl;
    return 0;
}

Tous les IDE proposent en général de démarrer avec un code similaire. Cela permet de commencer à programmer plus vite.

Vous retrouverez les 3 premières lignes (include, using namespace et int main) dans quasiment tous vos programmes C++. Vous pouvez considérer que tous vos programmes commenceront par ces lignes.

Sans trop entrer dans les détails (car cela pourrait devenir compliqué pour un début !), je vais vous présenter à quoi sert chacune de ces lignes.

include

La toute première ligne est :

#include <iostream>

C'est ce qu'on appelle une directive de préprocesseur. Son rôle est de « charger » des fonctionnalités du C++ pour que nous puissions effectuer certaines actions.

En effet, le C++ est un langage très modulaire. De base, il ne sait pas faire grand-chose (pas même afficher un message à l'écran !). On doit donc charger des extensions que l'on appelle bibliothèques et qui nous offrent de nouvelles possibilités.

Ici, on charge le fichier iostream, ce qui nous permet d'utiliser une bibliothèque… d'affichage de messages à l'écran dans une console ! Quelque chose de vraiment très basique, comme vous le voyez, mais qui nécessite quand même l'utilisation d'une bibliothèque.

Appeler iostream nous permet en fait de faire un peu plus qu'afficher des messages à l'écran : on pourra aussi récupérer ce que saisit l'utilisateur au clavier, comme nous le verrons plus tard.

iostream signifie « Input Output Stream », ce qui veut dire « Flux d'entrée-sortie ». Dans un ordinateur, l'entrée correspond en général au clavier ou à la souris, et la sortie à l'écran. Inclure iostream nous permet donc en quelque sorte d'obtenir tout ce qu'il faut pour échanger des informations avec l'utilisateur.

Plus tard, nous découvrirons de nouvelles bibliothèques et il faudra effectuer des inclusions en haut des codes source comme ici. Par exemple, lorsque nous étudierons Qt, qui permet de réaliser des programmes graphiques (GUI), on insérera une ligne comme celle-ci :

#include <Qt>

Notez qu'on peut charger autant de bibliothèques que l'on veut à la fois.

using namespace

La ligne :

using namespace std;

… permet en quelque sorte d'indiquer dans quel lot de fonctionnalités notre fichier source va aller piocher.

Si vous chargez plusieurs bibliothèques, chacune va proposer de nombreuses fonctionnalités. Parfois, certaines fonctionnalités ont le même nom. Imaginez une commande « AfficherMessage » qui s'appellerait ainsi pour iostream mais aussi pour Qt ! Si vous chargez les deux bibliothèques en même temps et que vous appelez « AfficherMessage », l'ordinateur ne saura pas s'il doit afficher un message en console avec iostream ou dans une fenêtre avec Qt !

Pour éviter ce genre de problèmes, on a créé des espaces de noms (namespace), qui sont des sortes de dossiers à noms. La ligne using namespace std; indique que vous allez utiliser l'espace de noms std dans la suite de votre fichier de code. Cet espace de noms est un des plus connus car il correspond à la bibliothèque standard (std), une bibliothèque livrée par défaut avec le langage C++ et dont iostream fait partie.

int main()

C'est ici que commence vraiment le cœur du programme. Les programmes, vous le verrez, sont essentiellement constitués de fonctions. Chaque fonction a un rôle et peut appeler d'autres fonctions pour effectuer certaines actions. Tous les programmes possèdent une fonction dénommée « main » (Qui se prononce « mèïne » en anglais.), ce qui signifie « principale ». C'est donc la fonction principale.

Une fonction a la forme suivante :

int main()
{
 
}

Les accolades déterminent le début et la fin de la fonction. Comme vous le voyez dans le code source qui a été généré par Code::Blocks, il n'y a rien après la fonction main. C'est normal : à la fin de la fonction main le programme s'arrête ! Tout programme commence au début de la fonction main et se termine à la fin de celle-ci.

Cela veut dire qu'on va écrire tout notre programme dans la fonction main ?

Non ! Bien que ce soit possible, ce serait très délicat à gérer, surtout pour de gros programmes. À la place, la fonction main appelle d'autres fonctions qui, à leur tour, appellent d'autres fonctions. Bref, elle délègue le travail. Cependant, dans un premier temps, nous allons surtout travailler dans la fonction main car nos programmes resteront assez simples.

cout

Voici enfin la première ligne qui fait quelque chose de concret ! C'est la première ligne de main, donc la première action qui sera exécutée par l'ordinateur (les lignes que nous avons vues précédemment ne sont en fait que des préparatifs pour le programme).

cout << "Hello world!" << endl;

Le rôle de cout (à prononcer « ci aoute ») est d'afficher un message à l'écran. C'est ce qu'on appelle une instruction. Tous nos programmes seront constitués d'instructions comme celle-ci, qui donnent des ordres à l'ordinateur.

Notez que cout est fourni par iostream. Si vous n'incluez pas iostream au début de votre programme, le compilateur se plaindra de ne pas connaître cout et vous ne pourrez pas générer votre programme !

Notez bien : chaque instruction se termine par un point-virgule ! C'est d'ailleurs ce qui vous permet de différencier les instructions du reste. Si vous oubliez le point-virgule, la compilation ne fonctionnera pas et votre programme ne pourra pas être créé !

Il y a 3 éléments sur cette ligne :

  • cout : commande l'affichage d'un message à l'écran ;
  • “Hello world!” : indique le message à afficher ;
  • endl : crée un retour à la ligne dans la console (end line - fin de ligne).

Il est possible de combiner plusieurs messages en une instruction. Par exemple :

cout << "Bonjour tout le monde !" << endl << "Comment allez-vous ?" << endl;

… affiche ces deux phrases sur deux lignes différentes. Essayez ce code, vous verrez !

Sous Windows, les caractères accentués s'affichent mal (essayez d'afficher « Bonjour Gérard » pour voir !). C'est un problème de la console de Windows (problème qu'on peut retrouver plus rarement sous Mac OS X et Linux). Il existe des moyens de le régler mais aucun n'est vraiment satisfaisant. À la place, je vous recommande plutôt d'éviter les accents dans les programmes console sous Windows.

Rassurez-vous : les GUI que nous créerons plus tard avec Qt n'auront pas ce problème !

Pour être sûr de bien comprendre ce qui se passe, je vous invite à créer vos propres exemples et à afficher ce qui vous passe par la tête. N'oubliez pas d’utiliser endl pour réaliser des retours à la ligne et de séparer chaque morceau de texte par les chevrons «. D'ailleurs, vous devriez être fier de ces essais, ce sont les premiers programmes C++ que vous réalisez tout seul sans copier depuis un cours ! Je vous conseille de faire de même tout au long de ce cours. A chaque que fois qu'il y aura des exemples, essayez de modifier les instructions, de voir ce qui se passe si on change l'ordre, bref de “bidouiller”, c'est le meilleur moyen d'apprendre.

Au cours de vos essais, vous avez peut⁻être essayé d'afficher un backslash (\) ou des guillemets (). Si ce n'est pas le cas, je vous propose de le faire maintenant:

#include <iostream>
using namespace std;
 
int main()
{
  cout << "Je fais des tests pour apprendre le C++ !" << endl;
  cout << """ << endl;
  cout << "\" << endl;
  return 0;
}

Le compilateur ne va pas aimer cela du tout et il un message d'erreur devrait s'afficher dans la zone au bas de votre fenêtre Code::Blocks. La raison est simple, pour afficher des guillemets, il faut utiliser la combinaison \” et pas juste , idem pour le backslash qu'il faut doubler (Pourquoi ? Et parler des Raw String). Il faut donc écrire:

#include <iostream>
using namespace std;
 
int main()
{
  cout << "Je fais des tests pour apprendre le C++ !" << endl;
  cout << "\"" << endl;
  cout << "\\" << endl;
  return 0;
}

Équivalent C++11 :

#include <iostream>
using namespace std;
 
int main()
{
  cout << "Je fais des tests pour apprendre le C++ !" << endl;
  cout << R"(")" << endl;
  cout << R"(\)" << endl;
  return 0;
}

Je vous laisse faire le test pour vérifier que cela fonctionne. Maintenant que vous avez vu ces deux petites exceptions, vous êtes prêt à écrire tout ce qui vous passera par la tête dans la console. Voyons maintenant ce qui se passe à la fin de notre programme.

return

La dernière ligne est :

return 0;

Ce type d'instruction clôt généralement les fonctions. En fait, la plupart des fonctions renvoient une valeur (un nombre par exemple). Ici, la fonction main renvoie 0 pour indiquer que tout s'est bien passé (toute valeur différente de 0 aurait indiqué un problème).

Vous n'avez pas besoin de modifier cette ligne, laissez-la telle quelle. Nous aurons d'autres occasions d'utiliser return pour d'autres fonctions, nous en reparlerons !

Faire des calculs

utiliser cout pour faire des calculs math. Présentation des opérateurs de base. Notion de entier et réel

Mettre en forme la sortie

utiliser setw, setprecision. tabulation, retour à la ligne

Commentez et mettez en forme vos programmes !

En plus du code qui donne des instructions à l'ordinateur, vous pouvez écrire des commentaires pour expliquer le fonctionnement de votre programme.

Les commentaires n'ont aucun impact sur le fonctionnement de votre logiciel : en fait, le compilateur ne les lit même pas et ils n'apparaissent pas dans le programme généré. Pourtant, ces commentaires sont indispensables pour les développeurs : ils leur permettent d'expliquer ce qu'ils font dans leur code ! (La première explication doit venir des noms de variables, classes, fonctions…)

Dès que vos programmes vont devenir un petit peu complexes (et croyez-moi, cela ne tardera pas), vous risquez d'avoir du mal à vous souvenir de leur fonctionnement quelque temps après avoir écrit le code source. De plus, si vous envoyez votre code à un ami, il aura des difficultés pour comprendre ce que vous avez essayé de faire juste en lisant le code source. C'est là que les commentaires entrent en jeu !

Les différents types de commentaires

Il y a deux façons d'écrire des commentaires selon leur longueur. Je vais vous les présenter toutes les deux.

Les commentaires courts

Pour écrire un commentaire court, sur une seule ligne, il suffit de commencer par / / puis d'écrire votre commentaire. Cela donne :

// Ceci est un commentaire

Mieux, vous pouvez aussi ajouter le commentaire à la fin d'une ligne de code pour expliquer ce qu'elle fait :

cout << "Hello world!" << endl; // Affiche un message à l'écran
Les commentaires longs

Si votre commentaire tient sur plusieurs lignes, ouvrez la zone de commentaire avec /* et fermez-la avec */ :

/* Le code qui suit est un peu complexe
alors je prends mon temps pour l'expliquer
parce que je sais que sinon, dans quelques semaines,
j'aurai tout oublié et je serai perdu pour le modifier */

En général, on n'écrit pas un roman dans les commentaires non plus… sauf si la situation le justifie vraiment.

Commentons notre code source !

Reprenons le code source que nous avons étudié dans ce chapitre et complétons-le de quelques commentaires pour nous souvenir de ce qu'il fait.

#include <iostream> // Inclut la bibliothèque iostream (affichage de texte)
 
using namespace std; // Indique quel espace de noms on va utiliser
 
/*
Fonction principale "main"
Tous les programmes commencent par la fonction main
*/
int main()
{
    cout << "Hello world!" << endl; // Affiche un message
    return 0; // Termine la fonction main et donc le programme
}

Si vous lancez ce programme, vous ne verrez aucune nouveauté. Les commentaires sont, comme je vous le disais, purement ignorés par le compilateur.

J'ai volontairement commenté chaque ligne de code ici mais, dans la pratique il ne faut pas non plus commenter à tout-va. Si une ligne de code fait quelque chose de vraiment évident, inutile de la commenter.

En fait, les commentaires sont plus utiles pour expliquer le fonctionnement d'une série d'instructions plutôt que chaque instruction une à une.

Mettre son code en forme

Un autre élément important pour les développeurs est la mise en forme du code. Le compilateur ne s'intéresse pas aux espaces ou aux retours à la ligne présents dans le code source. En fait, ils ne sont là que pour nous aider, nous les humains, à lire le code. Le compilateur serait tout à fait heureux de compiler ce code:

#include <iostream>
using namespace std; int main()
      {
    cout << "Hello world!"<<     endl; return 0; }

(Essayez pour voir !) Par contre, il n'est pas facile à lire du tout, vous en conviendrez. ;) Les paires de parenthèses ne sont pas simple à repérer, on ne voit pas bien la séparation entre les instructions, bref, ce code source n'est pas facile à utiliser. Imaginez maintenant que votre programme fasse des centaines de lignes de long, cela deviendra vite incompréhensible. Pour éviter que cela devienne ingérable, il est donc nécessaire de mettre son code en forme de manière plus lisible.

Pour nous aider dans cette tâche, Code::Blocks met à disposition un outil. Ouvrez le menu Plugins puis sélectionnez Source code formatter (AStyle). Votre code source se met alors en forme tout seul et devient automatiquement plus lisible ! Cela n'a rien changé pour le compilateur, le programme fera toujours exactement la même chose, par contre, pour vous (et vos collègues travaillant sur le même projet), cela change tout. Vous verrez que plus on avance dans ce cours, plus cela deviendra important d'avoir un code mis en forme proprement et bien commenté.

Dans Qt Creator : Ctrl+A puis Ctrl+I. Dans Visual : Ctrl+E puis Ctrl+D

Travaux pratiques

Projets

En résumé

  • On distingue deux types de programmes : les programmes graphiques (GUI) et les programmes console.
  • Il est plus simple de réaliser des programmes console pour commencer, c'est donc ce type de programme que nous étudierons en premier.
  • Un programme possède toujours une fonction main : c'est son point de démarrage.
  • La directive cout permet d'afficher du texte dans une console.
  • On peut ajouter des commentaires dans son code source pour expliquer son fonctionnement. Ils prennent la forme / / Commentaire ou /* Commentaire */.

Aller plus loin

votre_premier_programme.1400177090.txt.gz · Dernière modification: 2014/05/15 20:04 par gbdivers