Aller au contenu
Topos Uranos

Résumé

Cette leçon fixe la manière de travailler que le cours suivra jusqu’à la fin. Elle décrit le cycle qui consiste à éditer, enregistrer, compiler, exécuter et lire, et explique pourquoi il convient que l’erreur soit découverte à l’étape la plus précoce possible ; elle présente la commande de compilation que le cours recommande et ce que fait chacune de ses options ; elle montre comment parcourir le cycle depuis le terminal et comment configurer Visual Studio Code pour qu’il compile avec les mêmes options ; elle apprend à distinguer, dans la sortie du compilateur, une erreur d’un avertissement et à localiser la ligne à laquelle ils se rapportent ; elle présente les détecteurs, qui arrêtent le programme lorsqu’il tombe dans certains comportements indéfinis et signalent la ligne ; et elle laisse la console prête à afficher les accents et le ñ.

Objectifs d’apprentissage

  1. Compiler un programme depuis le terminal avec les options du cours (-std=c++23 -Wall -Wextra et les autres), nommer l’exécutable avec -o et l’exécuter.
  2. Configurer Visual Studio Code pour qu’il compile avec les mêmes options que le terminal et affiche les avertissements dans son panneau Problèmes.
  3. Distinguer, dans la sortie du compilateur, une erreur d’un avertissement, nommer l’option qui a produit chaque avertissement et localiser la ligne à laquelle il se rapporte.
  4. Activer les détecteurs d’erreurs de mémoire et de comportement indéfini, et reconnaître dans leur rapport la nature de la faute et la ligne où elle s’est produite.
  5. Diagnostiquer pourquoi une sortie montre des symboles étranges au lieu des accents et du ñ, et configurer l’éditeur et la console pour qu’ils s’affichent correctement.

Le cycle de travail

Écrire un programme n’est pas un acte unique, mais un cycle qui se répète des dizaines de fois au cours d’une même séance. Il comporte cinq moments : on édite le code source ; on enregistre le fichier, parce que le compilateur lit le disque et non l’écran de l’éditeur ; on compile, c’est-à-dire qu’on demande au compilateur de traduire le fichier en un exécutable ; on exécute le résultat ; et on lit attentivement tout ce que le compilateur et le programme ont écrit. Ce qu’on a lu conduit à une nouvelle édition, et le cycle recommence.

Le dernier moment est celui qu’on néglige le plus et celui qui importe le plus. La prémisse est simple : un défaut coûte d’autant plus à corriger qu’il est découvert plus tard. Si le compilateur le signale, on sait à quelle ligne et presque toujours pourquoi ; s’il se manifeste à l’exécution, on sait seulement que quelque chose a mal tourné ; s’il se manifeste des semaines plus tard, avec d’autres données, il se peut que personne n’en connaisse jamais la cause. Il s’ensuit qu’il convient de découvrir les défauts le plus tôt possible, et que le compilateur doit être traité comme le premier relecteur du programme : un lecteur infatigable qui, bien configuré, avertit de bien plus que des fautes de frappe.

Cette leçon configure ce relecteur à trois niveaux : les erreurs, qui empêchent d’obtenir l’exécutable ; les avertissements du compilateur, qui le permettent, mais signalent du code suspect ; et les détecteurs (sanitizers), qui surveillent le programme pendant qu’il s’exécute. Elle suppose installés le compilateur et l’éditeur (leçon 1.3). Les exemples utilisent des variables et des instructions if, qui seront expliquées dans les leçons 2.1 et 4.1 ; ici, il suffit de les lire.