Chapitre 7
UA6 : Programmation en langage C (suite et fin)
Lecture : 7 minQuiz de 16 questions
# UA6 : Programmation en langage C (suite et fin)
## Exécution d'un programme en C
### Introduction
Bienvenue dans cette leçon sur l'exécution d'un programme en langage C. Après avoir écrit votre code source, l'étape suivante cruciale est de le transformer en un programme que l'ordinateur peut comprendre et exécuter. Ce processus implique généralement deux étapes principales : la compilation et l'édition de liens. Nous allons explorer en détail ces étapes, les outils nécessaires et comment lancer votre programme.
### Concepts Clés
#### 1. Le Code Source
Le code source est le texte que vous écrivez dans un éditeur de texte (par exemple, `mon_programme.c`). Il est composé d'instructions en langage C et n'est pas directement compréhensible par l'ordinateur.
#### 2. La Compilation
La compilation est le processus qui traduit votre code source (lisible par l'humain) en code machine (lisible par l'ordinateur). C'est le compilateur qui effectue cette tâche.
* **Rôle du compilateur**
* Vérifie la syntaxe de votre code C.
* Traduit chaque fichier `.c` en un fichier objet (`.o` sur Linux/macOS, `.obj` sur Windows).
* Le fichier objet contient du code machine, mais il n'est pas encore un programme exécutable complet car il peut manquer des références à d'autres fichiers ou bibliothèques.
* **Exemple de commande (avec GCC)**
```bash
gcc -c mon_programme.c -o mon_programme.o
```
Cette commande compile le fichier `mon_programme.c` et crée un fichier objet nommé `mon_programme.o`.
#### 3. L'Édition de Liens (Linkage)
L'édition de liens est l'étape qui suit la compilation. Elle consiste à regrouper tous les fichiers objet (`.o`) générés, ainsi que les fonctions provenant des bibliothèques standards (comme `printf` de `stdio.h`), pour former un seul fichier exécutable.
* **Rôle de l'éditeur de liens**
* Résout toutes les références entre les différentes parties du code et les bibliothèques.
* Crée le fichier final que le système d'exploitation peut lancer.
* **Exemple de commande (avec GCC)**
```bash
gcc mon_programme.o -o mon_programme
```
Cette commande prend le fichier objet `mon_programme.o` et crée l'exécutable `mon_programme` (ou `mon_programme.exe` sur Windows).
* **Compilation et édition de liens en une seule étape**
Souvent, on combine les deux étapes pour plus de simplicité :
```bash
gcc mon_programme.c -o mon_programme
```
Cette commande compile `mon_programme.c` puis édite les liens pour produire directement l'exécutable `mon_programme`.
#### 4. L'Exécution du Programme
Une fois que vous avez votre fichier exécutable, vous pouvez le lancer.
* **Sur Linux/macOS**
Ouvrez un terminal, naviguez vers le répertoire où se trouve votre exécutable et tapez :
```bash
./mon_programme
```
Le `./` indique que le programme se trouve dans le répertoire courant.
* **Sur Windows**
Ouvrez l'invite de commande (CMD) ou PowerShell, naviguez vers le répertoire et tapez :
```cmd
mon_programme.exe
```
ou parfois simplement :
```cmd
mon_programme
```
#### 5. Environnements de Développement Intégrés (IDE)
Les IDE (comme Code::Blocks, Visual Studio Code avec extensions, CLion, etc.) simplifient grandement le processus en automatisant la compilation et l'édition de liens. D'un simple clic ou en appuyant sur une touche (souvent F9 ou F10), l'IDE lance les commandes nécessaires et exécute le programme pour vous.
#### 6. Erreurs Courantes
* **Erreurs de compilation (Syntax errors)**
Elles surviennent lorsque le code ne respecte pas les règles de la syntaxe C (par exemple, un point-virgule manquant, une accolade ouverte non fermée). Le compilateur vous indiquera la ligne et le type d'erreur.
* **Erreurs d'édition de liens (Linker errors)**
Elles apparaissent si l'éditeur de liens ne peut pas trouver une fonction ou une variable qu'elle est censée utiliser (par exemple, si vous oubliez d'inclure une bibliothèque nécessaire ou si vous faites une faute de frappe dans le nom d'une fonction).
* **Erreurs d'exécution (Runtime errors / Logic errors)**
Le programme compile et s'exécute, mais il ne fait pas ce que vous attendez, ou il se "plante" (par exemple, division par zéro, accès à une zone mémoire non valide). Celles-ci sont souvent les plus difficiles à débugger.
### Vocabulaire
* **Code source :** Le programme tel qu'écrit par le développeur en langage C.
* **Compilateur :** Outil qui traduit le code source en code machine (fichiers objet).
* **Code objet :** Résultat de la compilation d'un fichier source, contenant du code machine partiel.
* **Éditeur de liens (Linker) :** Outil qui assemble les fichiers objet et les bibliothèques pour créer un exécutable.
* **Exécutable :** Le fichier final que l'ordinateur peut exécuter directement.
* **IDE (Environnement de Développement Intégré) :** Logiciel qui combine éditeur de code, compilateur, éditeur de liens et débogueur.
* **Bibliothèque :** Collection de fonctions pré-écrites que vous pouvez utiliser dans votre programme (par exemple, `stdio.h` pour les entrées/sorties).
* **Débogage :** Processus d'identification et de correction des erreurs dans un programme.
### Exemples
#### Exemple 1: Le classique "Hello World!"
1. **Code source (`bonjour.c`)**
```c
#include <stdio.h>
int main() {
printf("Bonjour le monde !\n");
return 0;
}
```
2. **Compilation et édition de liens (en une étape) avec GCC**
Ouvrez un terminal et tapez :
```bash
gcc bonjour.c -o bonjour
```
Si tout se passe bien, un fichier nommé `bonjour` (ou `bonjour.exe` sur Windows) sera créé.
3. **Exécution**
Dans le même terminal, tapez :
```bash
./bonjour
```
Vous devriez voir afficher :
```
Bonjour le monde !
```
#### Exemple 2: Utilisation d'un IDE (Code::Blocks)
1. Créez un nouveau projet "Console application" en C.
2. Collez le code "Hello World" dans le fichier `main.c`.
3. Cliquez sur le bouton "Build and run" (Souvent un engrenage avec un triangle vert). Code::Blocks compilera, éditera les liens et exécutera votre programme en une seule action, affichant le résultat dans une fenêtre de console.
### Exercices
1. Décrivez les deux étapes principales nécessaires pour transformer un fichier `.c` en un programme exécutable. Quel outil est responsable de chaque étape ?
2. Vous avez un fichier source nommé `calcul.c`. Quelle commande utiliseriez-vous pour le compiler et créer directement un exécutable nommé `calculatrice` ?
3. Un ami a écrit un programme C mais ne parvient pas à le lancer. Il vous dit que le compilateur lui affiche un message d'erreur `syntax error before ';'`. De quel type d'erreur s'agit-il et que signifie-t-elle ?
4. Expliquez pourquoi un programme compilé sur un système d'exploitation (par exemple, Linux) ne fonctionnera généralement pas directement sur un autre (par exemple, Windows).
### Devoir
1. **Écrivez votre propre programme :** Créez un fichier `ma_presentation.c` qui affiche votre nom, votre âge et un message de votre choix. Utilisez la fonction `printf`.
2. **Compilation par étapes :**
* Compilez `ma_presentation.c` en un fichier objet `ma_presentation.o` en utilisant la commande `gcc -c ...`.
* Ensuite, éditez les liens de `ma_presentation.o` pour créer un exécutable nommé `presente_moi` en utilisant la commande `gcc ... -o ...`.
* Exécutez `presente_moi` et vérifiez le résultat.
3. **Utilisation d'un IDE :** Si vous avez accès à un IDE (comme Code::Blocks ou VS Code), recréez le programme `ma_presentation.c` dans l'IDE. Utilisez la fonction "Build and Run" de l'IDE pour le compiler et l'exécuter.
4. **Provoquez une erreur :** Dans votre fichier `ma_presentation.c`, supprimez volontairement un point-virgule (`;`) à la fin d'une instruction `printf`. Essayez de compiler le programme et notez le message d'erreur affiché par le compilateur. Quel est le message ? À quelle ligne se réfère-t-il ?
### Résumé
Nous avons vu que la transformation d'un code source C en un programme exécutable est un processus en plusieurs étapes :
1. **La compilation :** Votre code source (`.c`) est traduit en code machine partiel (fichier objet `.o`) par un compilateur (comme GCC).
2. **L'édition de liens :** Le ou les fichiers objet sont combinés avec les fonctions des bibliothèques standards par l'éditeur de liens pour créer l'exécutable final.
3. **L'exécution :** Le fichier exécutable est lancé par le système d'exploitation.
Les IDEs simplifient grandement ces étapes en les automatisant. Il est également essentiel de comprendre les différents types d'erreurs (compilation, édition de liens, exécution) pour pouvoir les résoudre efficacement. La maîtrise de ces étapes est fondamentale pour tout développeur C.
Quiz du chapitre
16 questions — vérifie chaque réponse pour voir l'explication.