213 lines
3.5 KiB
Markdown
213 lines
3.5 KiB
Markdown
# 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;
|
||
}
|
||
```
|