On a préparé le terrain jusqu'ici, maintenant il serait bien de commencer à programmer un peu, et on va commencer par quelque chose de très simple !
Écrivez un programme en console
Dans le chapitre précédent, notre IDE nous demandait quel type de programme nous voulions créer, et je vous avais dit de répondre console
.
Il faut savoir qu'en fait il existe deux types de programmes, pas plus :
Les programmes graphiques.
Les programmes en console.
Les programmes graphiques sont des programmes qui affichent des fenêtres que l'on peut ouvrir, réduire, fermer, agrandir… Ce sont ceux que vous connaissez sûrement le mieux : Word ou encore Paint sont des programmes graphiques, par exemple.
Les programmeurs parlent de GUI (Graphical User Interface – interface utilisateur graphique, en français).
Les programmes en console ont été les premiers à apparaître. À l'époque, l'ordinateur ne gérait que le noir et blanc, et il n'était pas assez puissant pour créer des fenêtres comme on le fait aujourd'hui.
Bien entendu, le temps a passé depuis. Si l'ordinateur est devenu grand public, c'est principalement grâce à une simplicité accrue de l'utilisation des fenêtres sur Windows et macOS dès la deuxième moitié des années 1980. Aujourd'hui, beaucoup de monde a oublié ce qu'était la console. Oui vous, là, ne regardez pas derrière vous, je sais que vous vous demandez ce que c'est !
J'ai une grande nouvelle : la console n'est pas morte ! En effet, Linux l'a remise au goût du jour :
Brrr… Terrifiant, hein ? Voilà, vous avez maintenant une petite idée de ce à quoi ressemble une console.
Ceci dit, plusieurs remarques :
aujourd'hui on sait afficher de la couleur, tout n'est donc pas en noir et blanc comme on pourrait le croire ;
la console est assez peu accueillante pour un débutant ;
c'est pourtant un outil puissant quand on sait le maîtriser.
Créer des programmes en mode console comme ici, c'est très facile et c'est idéal pour débuter.
Et sous Windows ? Il n'y a pas de console ?
Si, mais elle est un peu cachée, on va dire.
Vous pouvez avoir une console en faisant Démarrer / Accessoires / Invite de commandes
, ou bien encore en faisant Démarrer / Exécuter…
et en tapant ensuite cmd
:
Si vous êtes sous Windows, sachez que c'est dans une fenêtre qui ressemble à ça que nous ferons nos premiers programmes. Si j'ai choisi de commencer par des petits programmes en console, ce n'est pas pour vous ennuyer, bien au contraire ! En commençant par là, vous apprendrez les bases nécessaires pour pouvoir ensuite créer des fenêtres.
Tapez un minimum de code
C'est ce "code minimum" que nous allons découvrir maintenant. Il devrait servir de base pour la plupart de vos programmes en langage C.
Demandez le code minimal à votre IDE
Selon l'IDE que vous avez choisi dans le chapitre précédent, la méthode pour créer un nouveau projet n'est pas la même. Relisez-le si vous avez oublié comment faire.
Dans la vidéo suivante, nous allons voir comment créer le code minimum à l’aide d'un IDE. Nous analyserons ce code afin de comprendre l'intérêt de chaque ligne. Pour terminer, nous allons tester le code en le compilant et l'exécutant.
Voici le code le minimal en langage C dont on a besoin :
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("Hello world!\n");
return 0;
}
Notez que la ligne :
int main()
… peut aussi s'écrire :
int main(int argc, char *argv[])
Si vous êtes sous un autre IDE, copiez ce code source dans votre fichier main.c
pour que nous ayons le même code.
Enregistrez le tout. Oui je sais, on n'a encore rien fait, mais enregistrez quand même, c'est une bonne habitude à prendre. Normalement, vous n'avez qu'un seul fichier source appelé main.c
; le reste, ce sont des fichiers de projet générés par votre IDE.
Analysez le code minimal
Ce code minimal n'est rien d'autre que du chinois pour vous, j'imagine. Et pourtant, moi je vois là un programme console qui affiche un message à l'écran. Il va falloir apprendre à lire tout ça !
Commençons par les deux premières lignes qui se ressemblent beaucoup :
#include <stdio.h>
#include <stdlib.h>
Ce sont des lignes spéciales que l'on ne voit qu'en haut des fichiers source. Ces lignes sont facilement reconnaissables car elles commencent par un dièse #
. Ces lignes spéciales, on les appelle directives de préprocesseur (un nom compliqué, n'est-ce pas ?). Ce sont des lignes qui seront lues par un programme appelé "préprocesseur", un programme qui se lance au début de la compilation.
Oui mais elles signifient quoi, ces lignes ?
Le mot include
en anglais signifie "inclure" en français. Ces lignes demandent d'inclure des fichiers au projet, c'est-à-dire d'ajouter des fichiers pour la compilation.
Il y a deux lignes, donc deux fichiers inclus :
stdio.h
stdlib.h
On appelle ces fichiers des bibliothèques (certains parlent aussi de librairies, mais c'est un anglicisme), et ils contiennent du code tout prêt qui permet d'afficher du texte à l'écran.
Sans ces fichiers, écrire du texte à l'écran aurait été mission impossible. L'ordinateur à la base ne sait rien faire, il faut tout lui dire. Vous voyez la galère dans laquelle on est !
Bref, en résumé les deux premières lignes incluent les bibliothèques qui vont nous permettre (entre autres) d'afficher du texte à l'écran assez facilement.
Passons à la suite :
int main()
{
printf("Hello world!\n");
return 0;
}
Ce que vous voyez là, entre les accolades, c'est ce qu'on appelle une fonction. Pour le moment, notre programme n'en contient qu'une seule.
L'avantage, c'est qu'une fois la fonction écrite, vous n'aurez plus qu'à dire ouvrir_fichier
et votre ordinateur saura comment faire sans que vous ayez à tout répéter !
Sans rentrer dans les détails de la construction d'une fonction (il est trop tôt), analysons quand même ses grandes parties. La première ligne contient le nom de la fonction, c'est le deuxième mot.
Oui : notre fonction s'appelle donc main
. C'est un nom de fonction particulier qui signifie "principal". main
est la fonction principale de votre programme, c'est toujours par la fonction main
que le programme commence.
Une fonction a un début et une fin, délimités par des accolades {
et }
. Toute la fonction main
se trouve donc entre ces accolades. Si vous avez bien suivi, notre fonction main
contient deux lignes :
{
printf("Hello world!\n");
return 0;
}
Ces lignes à l'intérieur d'une fonction ont un nom. On les appelle instructions (ça en fait du vocabulaire qu'il va falloir retenir). Chaque instruction est une commande à l'ordinateur. Chacune de ces lignes demande à l'ordinateur de faire quelque chose de précis.
En regroupant intelligemment (c'est le travail du programmeur) les instructions dans des fonctions, on crée des "bouts de programmes tout prêts".
Un programme, ce n'est au bout du compte rien d'autre qu'une série d'instructions : "fais ceci", "fais cela". Vous donnez des ordres à votre ordinateur et il les exécute. Du moins si vous l'avez bien dressé.
printf("Hello world!\n");
demande à afficher le message "Hello world!" à l'écran. Quand votre programme arrivera à cette ligne, il va donc afficher un message à l'écran, puis passer à l'instruction suivante :return 0;
Cette ligne indique qu'on arrive à la fin de notre fonction main
, et demande de renvoyer la valeur 0.
Pourquoi mon programme renverrait-il le nombre 0 ?
Chaque programme, une fois terminé, renvoie une valeur, pour dire que tout s'est bien passé, par exemple.
La plupart du temps, cette valeur n'est pas vraiment utilisée, mais il faut quand même en renvoyer une. Votre programme aurait marché sans le return
0, mais on va dire que c'est plus propre et plus sérieux de le mettre, donc on le met.
Comme je suis de bonne humeur, je vous fais un schéma qui récapitule le vocabulaire qu'on vient d'apprendre :
Testez votre programme
Tout ce que vous avez à faire, c'est de compiler le projet, puis de l'exécuter. Cliquez sur Build & Run
.
Si vous ne l'avez pas encore fait, on vous demandera d'enregistrer les fichiers. Faites-le.
Après un temps d'attente insupportable (la compilation), votre premier programme apparaît :
Le programme affiche "Hello world!" (sur la première ligne).
Les lignes en dessous (générées par l'IDE) indiquent que le programme s'est bien exécuté et combien de temps s'est écoulé depuis le lancement.
Appuyez sur n'importe quelle touche du clavier pour fermer la fenêtre : votre programme s'arrête alors. Oui je sais, ce n'est pas transcendant. Mais bon, quand même ! C'est un premier programme, un instant dont vous vous souviendrez toute votre vie, non ?
Écrivez un message à l'écran
À partir de maintenant, on va modifier nous-mêmes le code de ce programme minimal.
Votre mission, si vous l'acceptez : afficher le message "Bonjour" à l'écran.
Si vous partez du code qui a été donné plus haut, il vous suffit simplement de remplacer "Hello world!" par "Bonjour" dans la ligne qui fait appel à printf
.
Cette fonction, où se trouve-t-elle ? Moi je ne vois que la fonction main
!
Vous vous souvenez de ces deux lignes ?
#include <stdio.h>
#include <stdlib.h>
Elles permettaient d'ajouter des bibliothèques dans votre programme. Ce sont en fait des fichiers avec des tonnes de fonctions toutes prêtes à l'intérieur.
stdio.h
et stdlib.h
contiennent la plupart des fonctions de base dont on a besoin dans un programme.
stdio.h
en particulier contient des fonctions permettant d'afficher des choses à l'écran (comme printf
), mais aussi de demander à l'utilisateur de taper quelque chose (ce sont des fonctions que l'on verra plus tard).
Dites bonjour au monsieur
Vous allez voir que c'est tout le temps comme ça que ça se passe en langage C : une fonction contient des instructions qui appellent d'autres fonctions, et ainsi de suite.
printf();
C'est bien, mais ce n'est pas suffisant. Il faut indiquer quoi écrire à l'écran, en donnant à la fonction printf
le texte à afficher :
Ouvrez des guillemets à l'intérieur des parenthèses.
Tapez le texte à afficher entre ces guillemets, comme cela avait déjà été fait sur le code minimal :
printf("Bonjour");
J'espère que vous n'avez pas oublié le point-virgule à la fin : il indique que l'instruction s'arrête là.
Voici le code source que vous devriez avoir sous les yeux :
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("Bonjour");
return 0;
}
On a donc deux instructions qui commandent dans l'ordre à l'ordinateur :
Affiche "Bonjour" à l'écran.
La fonction
main
est terminée, renvoie 0. Le programme s'arrête alors :
La ligne du "Bonjour" est un peu collée au reste du texte, contrairement à tout à l'heure.
Une solution pour rendre notre programme plus présentable serait de faire un retour à la ligne après "Bonjour" (comme si on appuyait sur la touche "Entrée"). Mais bien sûr, ce serait trop simple de taper "Entrée" dans notre code source pour qu'une entrée soit effectuée à l'écran ! Il va falloir utiliser ce qu'on appelle des caractères spéciaux…
Utilisez des caractères spéciaux
Les caractères spéciaux permettent d'indiquer qu'on veut aller à la ligne, faire une tabulation, etc.
Ils sont faciles à reconnaître : c'est un ensemble de deux caractères :
Le premier est toujours un anti-slash
\
;Le second, un nombre ou une lettre.
Voici deux caractères spéciaux courants que vous aurez probablement besoin d'utiliser :
\n
: retour à la ligne (= "Entrée") ;\t
: tabulation.
Pour faire une entrée, il suffit donc de taper\n
pour créer un retour à la ligne :
printf("Bonjour\n");
Votre ordinateur comprend qu'il doit afficher "Bonjour" suivi d'un retour à la ligne :
C'est déjà un peu mieux, non ?
Le syndrome de Gérard
Bonjour, je m'appelle Gérard et j'ai voulu essayer de modifier le programme pour qu'il me dise "Bonjour Gérard". J'ai l'impression que l'accent de Gérard ne s'affiche pas correctement… Que faire ?
Tout d'abord, bonjour Gérard. C'est une question très intéressante que vous nous posez là. Je tiens en premier lieu à vous féliciter pour votre esprit d'initiative, c'est très bien d'avoir eu l'idée de modifier un peu le programme. C'est en bidouillant les programmes que je vous donne que vous allez en apprendre le plus. Ne vous contentez pas de ce que vous lisez, essayez un peu vos propres modifications des programmes que nous voyons ensemble !
Bien ! Maintenant, j'ai une bien triste nouvelle à vous annoncer : la console de Windows ne gère pas les accents. Par contre la console de Linux, oui.
À partir de là, vous avez deux solutions.
Passer à Linux. C'est une solution un peu radicale, et il me faudrait un cours entier pour vous expliquer comment vous servir de Linux. Si vous n'avez pas le niveau, oubliez cette possibilité pour le moment.
Ne pas utiliser d'accents. C'est malheureusement la solution que vous risquez de choisir. La console de Windows a ses défauts, que voulez-vous. Il va vous falloir prendre l'habitude d'écrire sans accents. Bien entendu, comme plus tard vous ferez probablement des programmes avec des fenêtres, vous ne rencontrerez plus ce problème-là. Je vous recommande donc de ne pas utiliser d'accents temporairement, pendant votre apprentissage dans la console. Vos futurs programmes professionnels n'auront pas ce problème, rassurez-vous.
Pour ne pas être gêné, vous devrez donc écrire sans accent :
printf("Bonjour Gerard\n");
On remercie notre ami Gérard de nous avoir soulevé ce problème !
Si d'aventure vous vous appelez Gérard, sachez que je n'ai rien contre ce prénom. C'est simplement le premier prénom avec un accent qui m'est passé par la tête… Et puis, il faut toujours que quelqu'un prenne pour les autres, que voulez-vous !
Commentez votre code
Quel que soit le langage de programmation, on a la possibilité d'ajouter des commentaires à son code. Le langage C n'échappe pas à la règle.
Qu'est-ce que ça veut dire, "commenter" ?
Cela veut dire taper du texte au milieu de votre programme pour indiquer ce qu'il fait, à quoi sert telle ligne de code, etc. C'est indispensable car, même en étant un génie de la programmation, on a besoin de faire quelques annotations par-ci par-là. Les commentaires sont utiles :
pour vous y retrouver plus tard : on ne dirait pas comme ça, mais on oublie vite comment fonctionnent les programmes qu'on a écrits ;
si vous donnez votre projet à quelqu'un d'autre (qui ne connaît à priori pas votre code source), cela lui permettra de se familiariser avec bien plus rapidement ;
pour moi, pour annoter les codes source de ce cours afin de mieux vous expliquer à quoi peut servir telle ou telle ligne de code.
Il y a plusieurs manières d'insérer un commentaire :
Votre commentaire est court : il tient sur une seule ligne, il ne fait que quelques mots. Dans ce cas, vous devez taper un double slash
//
suivi de votre commentaire :// Ceci est un commentaire
Vous pouvez aussi bien écrire un commentaire seul sur sa ligne, ou bien à droite d'une instruction. C'est d'ailleurs très pratique pour indiquer à quoi sert la ligne sur laquelle il est :
printf("Bonjour"); // Cette instruction affiche Bonjour à l'écran
Votre commentaire est long : vous avez besoin d'écrire plusieurs phrases qui tiennent sur plusieurs lignes. Dans ce cas, vous devez taper un code qui signifie "début de commentaire" et un autre code qui signifie "fin de commentaire" :
pour indiquer le début du commentaire : tapez un slash suivi d'une étoile :
/*
;pour indiquer la fin du commentaire : tapez une étoile suivie d'un slash :
*/
.
Vous écrirez donc par exemple :
/* Ceci est un commentaire sur plusieurs lignes */
Reprenons notre code source qui écrit "Bonjour", et ajoutons-lui quelques commentaires juste pour s'entraîner :
/*
Ci-dessous, ce sont des directives de préprocesseur.
Ces lignes permettent d'ajouter des fichiers au projet,
fichiers que l'on appelle bibliothèques.
Grâce à ces bibliothèques, on disposera de fonctions toutes prêtes pour afficher
par exemple un message à l'écran.
*/
#include <stdio.h>
#include <stdlib.h>
/*
Ci-dessous, vous avez la fonction principale du programme, appelée main.
C'est par cette fonction que tous les programmes commencent.
Ici, ma fonction se contente d'afficher Bonjour à l'écran.
*/
int main()
{
printf("Bonjour"); // Cette instruction affiche Bonjour à l'écran
return 0; // Le programme renvoie le nombre 0 puis s'arrête
}
Voilà ce que donnerait notre programme avec quelques commentaires. Oui, il a l'air d'être plus gros, mais c'est le même que tout à l'heure.
À force, vous saurez que printf
permet d'afficher un message à l'écran, pas besoin de l'indiquer à chaque fois.
En résumé
Les programmes peuvent communiquer avec l'utilisateur via une console ou une fenêtre.
Il est beaucoup plus facile pour nos premiers programmes de travailler avec la console, bien que celle-ci soit moins attirante pour un débutant. Cela ne nous empêchera pas par la suite de travailler avec des fenêtres dans la partie III. Tout vient à point à qui sait attendre.
Un programme est constitué d'instructions qui se terminent toutes par un point-virgule.
Les instructions sont contenues dans des fonctions qui permettent de les classer, comme dans des boîtes.
La fonction
main
est la fonction par laquelle démarre votre programme. C'est la seule qui soit obligatoire, aucun programme ne peut être compilé sans elle.printf
est une fonction toute prête qui permet d'afficher un message à l'écran dans une console. Elle se trouve dans une bibliothèque où l'on retrouve de nombreuses autres fonctions prêtes à l'emploi.Les commentaires doivent guider le programmeur dans son code source, lui permettre de se repérer. Il vaut mieux commenter un ensemble de lignes plutôt que toutes les lignes une par une.
C’est très sympa d’afficher des messages sur la console, mais ce n’est pas suffisant pour créer un vrai programme. Nous allons maintenant voir le rôle des variables dans le code de votre programme. On se donne rendez-vous dans le prochain chapitre pour voir le monde des variables.