Introduction au Langage C
Laurent Rémi
Un peu d'histoire
- Developpé en 1972 par les laboratoires Bell
- Contemporain à UNIX
- Ses "papas" : Dennis Ritchie et Ken Thompson
- Evolution du langage B de Dennis Ritchie
- Popularisation et ajouts par Brian Kernighan
1978 : Sortie de "The C Programming Language" écrit par K&R, première version du langage
et on fait quoi avec ?
mais de tout !
- la majeure partie d'un noyau tel que Linux
- des Window Manager : Gnome
- des drivers
- de la gestion de stock de caramel (bien que ...)
- de tout ...
Ses défauts
- peu de fonctions "évoluées"
- gestion de la mémoire (nos zamis les pointeurs)
- réactions parfois déroutantes
Ses avantages
On peut tout faire avec, peut-être même le café
et en plus ça va vite
Tous à l'eau
notre premier programme C : un Hello World remixé
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
printf ("Hello FSUGAr\n");
return EXIT_SUCCESS;
}
Descriptif
- int main (void) : la fonction main, le point d'entrée, sera lancée à l'exécution du programme
- renvoie un entier : 'return 0', pour signaler que tout est OK
- ne prend aucun argument (dans ce cas ci) : 'void'
- printf ("Hello FSUGAr\n"); : affiche un message avec un retour à la ligne
'\n' est un code ASCII, pour le retour à la ligne
PS : parler des codes formats ... si possible
Mais #include <stdio.h> alors ?
'printf' n'est pas un mot réservé (int, char, if, while, ...), il faut donc spécifier sa forme, son prototype
rôle des fichiers d'entête, 'header'.
Ici le Standard Input Output stdio.h .
il en existe bien d'autres : string.h pour ne citer que lui, ou la stdlib qui ici nous donne la valeur de la constante EXIT_SUCCESS
Encore quelques petits trucs
- ';' pour signaler la fin d'une instruction
- '{' et '}' pour délimiter un bloc
- mafonction(arg1, arg2, ...) pour passer des arguments
Je veux le lancer, je veux
C est un langage compilé (je l'avais pas dit ? ah ... maintenant c'est fait)
Donc :
- On édite son fichier source (hello.c par ex)
- On compile ... oui, mais un peu d'explications tout de même
1, 2, 3 : ça marche !
Trois étapes, trois passes avant d'arriver au résultat final
- Le préprocesseur lit et interprètre ce qui lui est destiné (les lignes qui commencent par # en 'très' gros)
- Le compilateur ... compile en code machine (?) et laisse la gestion des fonctions (printf par exemple) au linker
- Le linker (éditeur de liens) va aller chercher dans les bibliothèques (libraries) le code des fonctions donc il a besoin
A mort la théorie
Avant de me faire lincher ...
- {"vi","gedit","kedit","ed"} hello.c
- tapez votre code
- gcc -o hellofsugar hello.c
- ./hellofsugar
- applaudissements
C'est beau, j'ai rien compris
En fait c'est normal : c'est une Introduction pour public non initié ;)
Je sens une certaine curiosité ... oui ? gagné !
Le kit de survie
Ce qu'il faut installer sous Debian/Ubuntu pour ce tuto
- gcc
- libc6-dev
- manpages-fr (pas indispensable)
avec les manpages, vour pourrez profiter de toute la magie de man, exemple : man 1 printf, man 2 open
vous ne savez pas ce que représente le 1 ou 2 : man man (et la magie repointe le bout de son nez ;) )