Rencontre avec le C++

Que diriez-vous de rentrer directement dans le vif du sujet en écrivant votre premier code C++ ? Nous allons commencer par l’un des exemples les plus connus et les plus utilisés : afficher un message. Et, vous verrez, il y a déjà de quoi dire.

Compilons notre premier programme

Allez donc sur Wandbox, ou bien ouvrez votre projet C++, et copiez-collez ce code dans la zone de texte.

#include <iostream>

int main()
{
    std::cout << "Hello World !" << std::endl; // affiche Hello World !
    return 0;
}

Cliquez ensuite sur Run (pour WandBox), faites Ctrl+F5 (Visual Studio Community), Ctrl+R (Qt Creator), ou compilez et exécutez en ligne de commande, et sous vos yeux émerveillés s’affiche le résultat suivant.

Hello World !

Félicitations, vous venez de compiler votre tout premier programme C++ ! Mais je devine que vous voulez comprendre ce qui s’est passé et avoir des explications sur ce que signifie ce code.

Démystification du code

Inclure des fonctionnalités déjà codées

#include <iostream>

Le but de notre programme est d’afficher un message. Des développeurs experts ont déjà créé un outil qui permet de le faire facilement. Il se trouve dans un fichier nommé « iostream », acronyme de « Input Output Stream », soit « Flux d’Entrées Sorties » dans la langue de Molière. Ce fichier fait partie de la bibliothèque standard C++, un ensemble de fonctionnalité déjà pré-codées et incluses partout avec chaque compilateur C++.

Pour utiliser les fonctionnalités offertes par ce fichier, notamment écrire un message, on doit l’importer dans notre programme. On dit qu’on l’inclut, d’où l’anglais « include ». Nous utiliserons beaucoup cette fonctionnalité tout au long du cours.

Enfin, dernière remarque, avez-vous noté que la ligne commence par le symbole # ? C’est ce qu’on appelle une directive de préprocesseur. Le préprocesseur est un programme qui se lance automatiquement au début de la compilation, notamment pour importer les fichiers qu’on lui demande. Nous le détaillerons plus loin dans ce cours. Retenez que #include nous permet d’importer des fichiers que des programmeurs experts ont déjà écrits avant nous.

Le point d’entrée

int main()
{
    
}

Quant l’ordinateur exécute un programme, il lui faut bien un endroit où commencer, un début, un point d’entrée. À partir de ce point d’entrée, il exécutera des instructions, des ordres, que nous aurons au préalable écrits. Cet endroit s’appelle main (prononcé « mèïne ») et est la fonction principale de tout programme C++.

Qu’est-ce qu’une fonction ? C’est un un regroupement d’instructions. En C++, vous trouverez ainsi des fonctions pour calculer une racine carrée, pour comparer des durées, trier une liste d’objets, afficher des messages, etc. Nous en utiliserons beaucoup déjà existantes et, plus tard, apprendrons à créer nos propres fonctions.

Dans notre cas, la fonction main regroupe deux instructions différentes.

Voici mes instructions…

std::cout << "Hello World !" << std::endl; // Affiche le message Hello World !

La première instruction est justement celle qui nous permet d’afficher un message. Elle débute avec std::cout (à prononcer « ci-aoûte »), qui représente la sortie standard en C++, c’est-à-dire la communication du programme vers l’utilisateur, par l’écran dans notre cas. Le préfixe std:: indique que vous utilisez une fonctionnalité déjà programmée et fournie dans la bibliothèque standard C++.

On note ensuite la présence de deux chevrons << qui permettent d’injecter, d’envoyer, du contenu dans la sortie standard, dans std::cout. Dans notre code d’introduction, nous injectons deux choses.

  • D’abord, "Hello World !", qui est le message que l’on voit s’afficher à l’écran.
  • Puis std::endl, qui permet d'aller à la ligne, comme son nom l’indique (« end line » que l’on traduit par « retour à la ligne »). De même que pour std::cout, std::endl est fourni par la bibliothèque standard.

Enfin, elle se termine par un point-virgule ; qui est obligatoire. Chaque instruction doit être terminée par un point-virgule. Ce sont les règles du C++ qui veulent ça.

Chevrons

On peut combiner les chevrons << autant que l’on souhaite. Essayez donc d’afficher la phrase « Bonjour, j’écris du C++ » suivi d’un retour à la ligne, suivi de « Et j’aime beaucoup. »

#include <iostream>

int main()
{
    std::cout << "Bonjour, j'écris du C++" << std::endl << "Et j'aime beaucoup.";

    return 0;
}
Un mot sur Windows

Si vous êtes sous Windows et que vous tentez d’afficher du texte avec des accents, vous allez obtenir des caractères bizarres. Pour afficher du code avec des accents, vous allez devoir ajouter les lignes 2, 3 et 8 dans votre code. Nous en reparlerons plus tard.

#include <iostream>
#define NOMINMAX
#include <Windows.h>

int main()
{
    // À utiliser avant d'afficher du texte.
    SetConsoleOutputCP(1252);
    std::cout << "Oui, je peux utiliser éèàï !" << std::endl;
}

Sous GNU/Linux et MacOS, vous n’aurez aucun problème, donc ignorez ces lignes.

return 0;

La deuxième instruction conclut la fonction main en renvoyant la valeur 0. Le mot anglais pour renvoyer est return ; vous croiserez d’ailleurs souvent l’anglicisme retourner.

Mais à qui est transmise cette valeur ? Au système d’exploitation. Le zéro, par convention, signifie que tout s’est bien passé.

Nous aurons l’occasion de comprendre mieux tout cela quand nous aborderons le chapitre sur les fonctions. Ne vous inquiétez donc pas de return 0;, sachez simplement qu’il termine la fonction main.

Les commentaires

Cela ne vous a pas échappé, mais j’ai omis de traiter un bout de code. En effet, cette partie bizarre avec des slashs.

// Affiche le message Hello World !

C’est ce qu’on appelle un commentaire. Les commentaires sont complètement ignorés par le compilateur, ils ne servent qu’aux humains. On s’en sert pour documenter son code, expliquer des passages un peu ardus, décrire des passages un peu moins lisibles ou tout simplement pour offrir quelques compléments d’information.

En effet, un code est bien plus souvent lu qu’écrit ou modifié. C’est pourquoi il est important qu’il soit lisible. Les commentaires aident à gagner en lisibilité.

Enfin, contrairement au code qui contient beaucoup de mots anglais, les commentaires peuvent être écrits dans la langue que l’on souhaite. Si beaucoup de projets collaboratifs ont des commentaires écrits en anglais, dans ce tutoriel, je les écrirai en français afin de vous aider à bien comprendre.

La syntaxe

On peut écrire des commentaires de deux façons. La première, c’est celle que nous avons vu avec les deux slashs //. Un commentaire ainsi créé s’arrête à la fin de la ligne où il est créé. On dit que c’est un commentaire mono-ligne.

// Cette ligne affiche Bonjour.
std::cout << "Bonjour";

// Cette ligne permet d'afficher un retour à la ligne.
std::cout << std::endl;

L’autre syntaxe permet d’écrire des blocs de commentaires bien délimités entre les symboles /* et */. On peut ainsi écrire des commentaires sur plusieurs lignes, voire entre plusieurs instructions !

/* Ceci est un commentaire sur une seule ligne. */
std::cout << "Hello World !" << std::endl; /* Ceci est un commentaire à la fin d'une ligne du code. */

/* Ceci...
...est un commentaire
écrit sur plusieurs lignes...
...car il est très long. */

std::/* Ceci est un commentaire noyé dans le code. */cout << "Hello World !";

Vu que les commentaires sont ignorés par le compilateur, on peut tout à fait en écrire en plein milieu d’une ligne de code. Mais ce n’est pas lisible, aussi je vous déconseille fortement de le faire, car un code est, je vous le rappelle, plus souvent lu qu’écrit.


En résumé

  • Un programme en C++ est composé d’instructions, qui sont les ordres que l’on donne à l’ordinateur.
  • Ces instructions sont regroupées dans des blocs appelés fonctions. Celle par laquelle commence tout programme C++ s’appelle main.
  • Nous avons utilisé la bibliothèque standard pour la première fois, avec le fichier iostream, afin d’afficher un message à l’écran.
  • Les commentaires sont ignorés par le compilateur mais nous sont très utiles à nous, humains.