jeudi 29 avril 2010

Hello World

La première chose qu'un codeur apprend à coder c'est un hello world, juste affiché ce message, c'est le plus simple possible.
alors on va faire ça, tu te crée un répertoire marc dans c:\mingw
dans ce dossier c:\mingw\marc, tu te crée un fichier hello.c, ce sera le code de ton programme, l'extension .c signifie que le fichier contiendra un programme en c.

je te conseille notepad++ pour éditer ton fichier dans la mesure où il t'affichera ton code avec des couleurs. http://notepad-plus.sourceforge.net/uk/site.htm

ok, bon d'abord on vérifie que ton compilo fonctionne, met toi en ligne de commande dans le répertoire marc et lance gcc pour voir si ça répond :
- démarrer/exécuter/cmd
- cd c:\mingw\marc
- gcc -v

ça doit finir par te dire gcc version 3.4.5 (mingw-vista special r3) normalement.
si c'est pas le cas, ton installation de mingw n'est pas bonne, dis moi je regarderais.

bon apparemment ça marche, maintenant on va taper un peu de code.
ouvre le fichier hello.c dans ton editeur de texte et tape ça :
#include <stdio.h>

int main(int argc, char* argv[]) {
printf("hello world\n");
return 0;
}

ensuite tu sauves ton fichier et dans la ligne de commande de tout à l'heure tu lance :
- gcc hello.c -o hello.exe
- hello
et tu devrais avoir dans ta console un petit "hello world" non ?

alors je t'explique :
#include ça veut dire qu'on demande au preprocesseur d'inclure le fichier stdio.h. le preprocesseur ça n'a rien à voir avec le processeur de ton ordi, c'est un truc qui est exécuté avant la compilation du fichier et qui permet de remplacer du texte, inclure des fichiers et d'autres trucs. là en l'occurrence on utilise la directive include.
à quoi ça sert d'inclure stdio.h ? je t'explique plus tard.

ensuite tu vois un int main(...) ça c'est la façon en c de déclarer une fonction. une fonction ça permet de mettre des bouts de code que tu utilises souvent dans un coin et de les appeler quand tu en as besoin dans ton code par leur nom (ici main).

alors là main à une signification particulière, tout les exécutables (TOUS) ont une fonction main, c'est le point d'entrée de chaque programme, la première de tes fonctions qui est appelée (presque, je t'expliquerais ça plus tard).

donc là en gros, on sait que dès que le système aura lancé notre exécutable, on se trouvera dans la fonction main.

une fonction tu la déclare comme ça :
type_retour nom_fonction(type_paramètre nom_paramètre) {}

type_retour ça indique quel sera le type renvoyé par la fonction. tu peux voir ici les types en c :
http://fr.wikipedia.org/wiki/C_(langage)#Types
dans notre cas, le type de retour est int c'est à dire un nombre entier (sans chiffres après la virgule)

nom_fonction c'est le nom de ta fonction, ce que tu veux ou presque, dans notre cas, main.

type_paramètre c'est le type du paramètre, au choix dans les mêmes types que ce de retour, dans notre cas encore int et char*[] pour le deuxième paramètre.

et enfin nom_paramètre correspond au nom que l'on donne au paramètre, ici argc et argv.

donc la notre main c'est une fonction qui renvoi un int et prend en paramètre un int et un char*[]. char*[] c'est pas clair mais j'y reviendrais plus tard.

le contenu de ta fonction doit toujours se trouver entre des accolades {}.

aller, ligne suivante, printf("hello world\n");
alors là tu vois comment on appelle une fonction, en l'occurrence printf et comment on lui passe des paramètres en l'occurrence "hello world\n".
cette fonction printf fait partie d'un ensemble de fonction standard livré avec les compiilateurs. le compilateur pour générer le code machine doit connaître toutes les fonctions, sinon il compile pas. le problème c'est que comme tu le vois, cette fonction n'existe pas dans notre fichier. eh ben en fait c'est l'include de tout à l'heure qui contient cette fonction. voilà pourquoi en premier il y a cette include, il permet de dire au compilateur que la fonction printf existe et quelle est sa signature (la signature c'est le nom, la valeur de retour et les paramètres d'une fonction).
donc printf est déclaré dans stdio.h et ça sert à afficher un truc dans la console. c'est une fonction super utile et très très très souvent utilisé pour plein de chose.
donc printf ici nous à afficher dans la console notre petit message hello world.

d'ailleurs tu vois aussi ici comment on déclare un texte en c. guillemet le texte fermé les guillemets. le \n que tu vois à la fin du texte ça permet d'aller à la ligne c'est un code standard aussi.

ah et le ";" à la fin, toutes les instructions en c doivent se terminer par un ; ça indique au compilateur qu'il peut passer à la prochaine instruction.

on termine notre programme par return 0;.
return c'est un mot clé pour dire quelle sera la valeur que la fonction va renvoyer. tu te rappelles que main renvoi un int, ben voilà, avec return on dit juste qu'on renvoie 0 à la personne qui a appelé main.

pourquoi renvoyer 0 ? parce que comme je te l'ai dis, main c'est une fonction standard pour les exécutables. et il est défini qu'un exécutable peut prendre des paramètres (argc pour le nombre de paramètre et argv pour la valeur des paramètres) et doit renvoyer si le programme s'est bien terminé ou non. 0 c'est le code pour dire que tout s'est bien terminé sans erreur.

ok. on termine par la compilation : gcc hello.c -o hello.exe
ici on appelle gcc le compilateur et on lui dit de prendre le fichier hello.c et de compiler dans le fichier hello.exe, c'est tout, si tu as mal tapé quelque chose ben tu auras un message d'erreur de la part de gcc.

je te conseille de lire vite fait le wikipedia sur le c :
http://fr.wikipedia.org/wiki/C_(langage)

ce que tu peux essayer de faire dans ce petit programme c'est de changer le message renvoyé par exemple tu peux mettre good bye world.
tu peux aussi essayer de te créer une fonction qui fait des additions ou des trucs du genre et qui te renvoies la valeur.

enfin essaye de trafiquer un peu tout ça pour voir si tu comprends bien. voilà, bonne chance !

8 commentaires:

  1. quand je lance la commande gcc -v il me dit qu'elle n'existe pas

    RépondreSupprimer
  2. donc je suppose que mingw est mal installer ?

    RépondreSupprimer
  3. par contre quand je vais dans c:/mingw/bin et que je tape gcc -v , la il me sort tous plein d'info et a la fin gcc version 3.4.5 (mingw-vista special r3)

    RépondreSupprimer
  4. Bon en bidouillant un peu j'ai reussis en mettant mes fichiers .c dans le repertoire bin, la ou y a deja gcc et autre au lieux de marc et sa marche

    RépondreSupprimer
  5. #include
    int main(int argc, char* argv [])

    {
    char prenom[50]="";
    printf'"Quel est votre prenom ?\n");
    scanf("%s", prenom);

    printf(" Bonjour %s !, prenom);
    return 0;
    }



    j'ai essayer sa mais quand je lui demande de compiler il me met sa :

    C:\mingw\bin>gcc test.c -o test.exe
    test.c: In function `main':
    test.c:6: error: missing terminating ' character
    test.c:7: error: syntax error before "scanf"
    test.c:9: error: missing terminating " character
    test.c:10: error: syntax error before "return"

    RépondreSupprimer
  6. mouahahah c'est bon j'ai trouver mes erreurs, et corriger les oublies de syntaxe ^^

    RépondreSupprimer
  7. #include
    int main(int argc, char* argv [])

    {
    char prenom[50]="";
    printf("Quel est votre prenom ?\n");
    scanf("%s", prenom);

    printf("Bonjour %s !\n");
    return 0;
    }


    le nouveau code corriger

    RépondreSupprimer
  8. #include
    int main(int argc, char* argv [])

    {
    int nombre1 = 0, nombre2 = 0, nombre3 = 0;
    char prenom[50]="";
    printf("Bonjour, quel est votre prenom ?\n");
    scanf("%s", prenom);
    printf("Quel jour etes vous nee ?\n");
    scanf("%d\n", nombre1);
    printf("Quel mois etes vous nee ?\n");
    scanf("%d\n", nombre2);
    printf("Quelle annee etes vous nee ?\n");
    scanf("%d\n", nombre3);
    printf("Bonjour %s, vous etes nee le %d %d %d !!!\n", prenom, nombre1, nombre2, nombre3);
    return 0;
    }


    j'ai essayer sa, sa fonctionne pour les deux premieres questions mais sa palnte juste apres et sa me met un rapport d'erreur ???

    RépondreSupprimer