diff --git a/001-ch0-présentation.md b/001-ch0-présentation.md new file mode 100644 index 0000000..9ade6e8 --- /dev/null +++ b/001-ch0-présentation.md @@ -0,0 +1,212 @@ +# Chapitre 0 — Introduction au langage C + +## 0.1 Présentation du langage C + +Le langage C est un langage de programmation bas niveau. +Cela signifie qu’il est proche du fonctionnement réel de la machine. + +Concrètement, un programme C manipule directement la mémoire. +Chaque variable correspond à une zone mémoire précise. + +Le programmeur peut lire et écrire à des adresses mémoire. +Cela se fait à l’aide des pointeurs. + +Le C permet aussi de manipuler les bits. +On peut contrôler précisément la représentation des données. + +Par exemple, un entier est stocké sous forme binaire. +Le programmeur peut agir directement sur ces bits. + +Le C ne masque pas le fonctionnement du processeur. +Il expose des concepts proches de l’assembleur. + +Par exemple : +- la pile (stack) +- le tas (heap) +- les appels de fonctions +- la mémoire brute + +Le C ne fournit pas de protections automatiques. + +Cela signifie que le langage ne vérifie pas certains comportements dangereux. + +Par exemple : +- accès hors limites d’un tableau +- utilisation d’un pointeur invalide +- dépassement d’entier +- division par zéro + +Ces situations peuvent provoquer un comportement indéfini. + +Le programme peut : +- planter +- produire un résultat incorrect +- sembler fonctionner mais être corrompu + +Le C ne possède pas de ramasse-miettes. + +Un ramasse-miettes (garbage collector) est un système automatique. +Il libère la mémoire qui n’est plus utilisée. + +Dans certains langages, cette gestion est automatique. +En C, elle est manuelle. + +Lorsque l’on alloue de la mémoire : +- avec malloc +- ou calloc + +Il faut la libérer avec free. + +Sinon : +- fuite mémoire +- crash +- comportement indéfini + +Le C donne un contrôle total au programmeur. +Mais cela demande de la rigueur. + +--- + +### Exemple 1 — Programme minimal + +```c +int main(void) +{ + // Point d'entrée du programme + return 0; +} +``` + +--- + +### Exemple 2 — Affichage simple + +```c +#include + +int main(void) +{ + // Affiche un message + printf("Bonjour\n"); + return 0; +} +``` + +--- + +### Exemple 3 — Calcul simple + +```c +#include + +int main(void) +{ + int a = 5; + int b = 3; + int resultat = a + b; + + printf("Resultat: %d\n", resultat); + return 0; +} +``` + +--- + +## 0.2 Historique et cas d’usage + +Le langage C a été créé dans les années 1970. +Il a été conçu pour écrire des systèmes d’exploitation. + +Le système UNIX a été écrit en C. + +Aujourd’hui, le C est utilisé dans : +- systèmes d’exploitation +- systèmes embarqués +- bibliothèques système +- moteurs haute performance + +--- + +## 0.3 Compilation vs interprétation + +Un programme C est compilé. + +Cela signifie qu’il est transformé en code machine avant exécution. + +Étapes : +1. Préprocesseur +2. Compilation +3. Linking + +--- + +## 0.4 Structure générale d’un programme C + +Un programme C contient : +- des fonctions +- des variables +- des instructions + +La fonction principale est main. + +--- + +## 0.5 Premier programme + +```c +#include + +int main(void) +{ + printf("Hello, world\n"); + return 0; +} +``` + +--- + +## 0.6 Programme minimal et printf + +Un programme commence toujours par main. + +--- + +### Exemple 1 + +```c +int main(void) +{ + return 0; +} +``` + +--- + +### Exemple 2 + +```c +#include + +int main(void) +{ + printf("Hello, world\n"); + return 0; +} +``` + +--- + +### Exemple 3 + +```c +#include + +int main(void) +{ + int valeur = 42; + + printf("Valeur = %d\n", valeur); + + return 0; +} +```