Big Tuto : Programmez avec le langage C

Chapitre 3 : Notre premier programme !

Tutoriel présenté par : The Ludovyc et Jérémie F. Bellanger (Jay)
 The Ludovyc 
Publication : 5 mars 2014 
Dernière révision : 17 avril 2016

   Dans ce chapitre, nous allons enfin créer notre premier programme ! smiley

   Bon, ne vous attendez quand même pas à quelque chose d'exceptionnel, mais ce sera quand même votre premier programme en C, et vous ne pourrez vous empêcher d'y repenser avec une petite larme à l'oeil, dans 15 ans! blush Non, je rigole ! cheeky

    I- En avant, toutes !

  Utilisateurs de Code::Blocks / Visual Studio : C'est parti, alors créez un nouveau projet dans votre IDE (en C pour Code::Blocks et C++ pour VS), ouvrez le fichier main.c et effacez ce qui s'y trouve (Code::Blocks) ou créer un fichier main.cpp (VS), et vous êtes parés à taper du code (cf. chapitre suivant pour les détails, si vous avez encore un trou wink).

  Utilisateurs de la console et de Sublime Text 2 ou Notepad++ : Tout d'abord, créez un nouveau dossier (que vous pourrez appeller Prog ou Programmation exemple). C'est là que nous mettrons nos fichiers. Choisissez des noms plutôt courts et sans caractère spéciaux pour la console (aussi bien pour les dossiers que les fichiers). Je vous invite à placer ce dossier de préférence à la racine d'un disque car il sera alors plus facilement accessible par la console ou par l'explorateur (et ce sera moins galère à taper) wink.

    II- Le main()

   Voici le code de notre premier programme :

int main()
{

}

    Voilà, @ bientôt pour le prochain chapitre !! wink

    Quoi, c'est déjà fini !?! Mais c'est de l'arnaque !! angry J'ai pas payé, mais je veux quand même être remboursé !! cheeky

    Oups, désolé j'ai pas pu me retenir de faire cette blague ! cool

   Bon, plus sérieusement, on pourrait penser que ce que nous venons de coder c'est peu, mais en fait c'est la base ! Certes, si on compile et on exécute le programme, il ne se passera rien du tout... La console va juste s'ouvrir et rester noire... frown Mais laissez-moi vous donner quelques explications ! wink

   Le main() est une fonction et je dirais même plus c'est LA fonction. Sans elle, pas de programme en C (ni dans la plupart des langages d'ailleurs...). C'est la seule et unique fonction qui est appelée au démarrage de votre programme. Il est donc obligatoire qu'un programme contienne une fonction main() pour pouvoir démarrer, et elle sera aussi unique car, en C, deux fonctions ne peuvent pas porter le même nom !

   Les parenthèses qui suivent le nom de la fonction indiquent l'ouverture et la fermeture du corps de déclaration des paramètres, c'est à cela que l'on reconnait une fonction d'ailleurs : monstre() sera une fonction par exemple tandis que monstre sera une variable (ou une structure - cf. le Big Tuto SDL wink). Les accolades { et } indiquent l'ouverture et la fermeture du corps de la fonction.

   Cette forme est cependant la forme minimale de notre main(). En effet, on peut lui ajouter d'autres instructions, qui pourront se révéler utiles plus tard, au fur et à mesure que vous créerez des programmes de plus en plus compliqués: 

int main()
{
     return 0;
}

   Vous avez sûrement déjà noté le int qui précède le nom de notre fonction. Cela dénote en fait un nombre entier (integer en anglais).

   Mais alors, pourquoi écrire "nombre entier" devant le nom de notre fonction ?! surprise

   En fait, c'est obligatoire et cela indique le type de variable que le programme ou la fonction va retourner à la fin de son exécution. Dans notre cas, main() va retourner un nombre entier (on verra les autres types de variables plus tard - mais sachez qu'une fonction qui ne retournera rien sera notée void wink).

   Oui, mais et le return 0; dans tout ça ? angry

   Eh bien, il n'est pas obligatoire, mais si on le met, cela signifie que le programme renverra 0 s'il se termine correctement (sans erreur). Cela peut-être utile pour le débuguer plus tard. On dans le cas d'une fonction, cela permet de gérer la suite du programme en fonction du nombre retournée. Si on prend une fonction int DetecterLesCollisions() par exemple, dont le but serait de détecter les collisions entre le joueur et des monstres, si cette fonction renvoie 0, tout va bien, il n'y a pas de collisions, par contre, si elle renvoie 1, le joueur est touché et meurt : Game Over ! devil Bon, c'est un exemple un peu radical, mais c'est pour que vous compreniez. wink

Vous noterez aussi le point-virgule (;) à la fin de return 0; -> il est très important en informatique car il permet d'indiquer la fin d'une instruction (un peu comme le point d'une phrase). Dans un premier temps, vous allez sûrement l'oublier de temps en temps et votre code ne compilera pas. Cherchez donc de ce côté-là en premier. wink

Votre oeil de lynx n'aura pas manqué non plus de remarquer que l'instruction return est en retrait par rapport au reste du code. On parle dans ce cas d'indentation. Elle n'est pas obligatoire en C, mais permet une meilleure lisibilité du code. Cela indique que return 0; est dans la fonction main(). Dans d'autres langages de programmation (ou de script), il est obligatoire d'user de l'indentation comme en Python, par exemple.

   La fonction main() étant très spéciale, il en existe une autre version plus complète, qui prend deux arguments en entrée ! Pour utiliser certaines bibliothèques comme la SDL 2, par exemple, vous serez obligés de l'adopter. C'est aussi la forme la plus standard du main(), elle est donc préférable, même si vous ne vous servez pas de ces deux variables en entrée. Mais nous y reviendrons plus tard ! wink

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

Notez que la mise en forme du code ci-dessus (le plus souvent celle par défaut dans les IDE) n'est qu'indicative et que son seul but est d'aérer le code pour qu'il soit lisible. On pourrait tout aussi bien écrire : 

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

ou même :

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

Cela fonctionnerait exactement de la même façon. wink

    III- Hello world !

   Il est de coutume lors d'un tutoriel ou d'un cours sur un langage de programmation que notre premier programme soit un "Hello World!" (qu'on pourrait traduire par "Bonjour tout le monde !" en français, si vous êtes nul en anglais à ce point-là cheeky). Le but de ce programme minimal est de montrer qu'on est capable de compiler et de lancer un programme minimal, dont le but sera d'écrire un message, indiquant que tout fonctionne bien. Ne dérogeons donc pas à la règle, et écrivons notre vrai premier programme. Le voici :

#include <stdio.h>
 
int main(int argc, char *argv[])
{
     printf("Hello world!");
     return 0;
}

   Si vous compilez et exécutez se programme, cela affichera donc "Hello world!" dans votre console ! Merveilleux, n'est-ce pas ? Votre premier programme !! cool

   Amusez-vous maintenant à changer le message (sans enlever les guillemets wink), pour faire afficher ce que vous souhaitez à votre programme.

   Allez, c'est parti pour quelques explications ! smiley

   #include <stdio.h> permet d'ajouter la bibliothèque standard du C, nommée stdio.h (pour standard input/output), à notre programme. Nous ajoutons cette bibliothèque pour avoir accès à la fonction "printf" car ce n'est pas nous qui l'avons codée : elle fait directement partie des bibliothèques standards du C. Nous reparlerons de l'ajout de bibliothèques plus tard, mais retenez juste que si on ne l'ajoute pas, vous ne pourrez pas utiliser l'instruction "printf"...

Vous noterez qu'on ne met pas de point-virgule (;) après les instructions #include.

Bibliothèque est la traduction française de l'anglais library (souvent raccourci lib.). Cependant, il est très souvent mal traduit par librairie en français (même si on n'y achète pas de livre cheeky). 

   La fonction "printf" prend en paramètres une chaîne de caractères, qui équivaut au message que l'on veut afficher. Pour cela, cette chaîne de caractères doit se trouver entre parenthèses (qui servent à indiquer son type wink). Cette chaîne est ensuite placée entre les parenthèses suivant le nom de l'instruction : on dit qu'on remplit le corps de déclaration avec les paramètres dont l'ordre et le type a été prédéfinie lors de la création de la fonction. Pour l'instant, ça doit vous sembler être du chinois, mais vous verrez que d'ici très peu de temps, vous créerez vos propres fonctions et ferez tout ça très simplement wink.

   Et voilà la fin de notre troisième chapitre ! J'espère que cela vous a plu et que vous avez déjà appris beaucoup de choses ! Les prochains chapitres nous premettront de voir comment créer et utiliser des variables, puis des instructions comme if ou for avant de nous lancer dans la création de nos propres fonctions. cool

   @ bientôt ! smiley

 

Connexion

CoalaWeb Traffic

Today97
Yesterday178
This week597
This month4271
Total1743478

25/04/24