ch0
This commit is contained in:
212
001-ch0-présentation.md
Normal file
212
001-ch0-présentation.md
Normal file
@@ -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 <stdio.h>
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
// Affiche un message
|
||||||
|
printf("Bonjour\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Exemple 3 — Calcul simple
|
||||||
|
|
||||||
|
```c
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
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 <stdio.h>
|
||||||
|
|
||||||
|
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 <stdio.h>
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
printf("Hello, world\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Exemple 3
|
||||||
|
|
||||||
|
```c
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
int valeur = 42;
|
||||||
|
|
||||||
|
printf("Valeur = %d\n", valeur);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user