Débogage : Apprendre à utiliser les outils de débogage (gdb) pour identifier et corriger les erreurs dans les programmes en C.
Chaîne de compilation : Comprendre le processus complet de compilation en C avec gcc, y compris les étapes de prétraitement, compilation, assemblage et édition des liens.
Manipulation de chaînes de caractères : Maîtriser les techniques de manipulation de chaînes de caractères en C, incluant les opérations de recherche, découpage, et concaténation.
Gestion des données et recherche de phrases : Utiliser les structures en C pour gérer des informations (comme les données d’étudiant.e.s) et implémenter des techniques pour rechercher des phrases spécifiques dans des fichiers.
Cet exercice présente une brève introduction à gdb et explique comment déboguer votre programme C à l’aide de gdb.
Le code suivant (erreurs.c) présente une erreur majeure : il tente d’accéder à des indices de tableau supérieurs à la taille maximale du tableau (100).
#include <stdio.h>
int main() {
int tableau[100];
for (int compteur = 0; compteur < sizeof(tableau); compteur++) { //Erreur
tableau[compteur] = tableau[compteur] * 2;
}
return 0;
}
$ gcc erreurs.c
$ ./a.out
*** stack smashing detected ***: terminated
Le programme plante comme prévu : sizeof(tableau) vaut 400 (100 entiers de 4 octets), et non 100.
$ gcc -ggdb3 erreurs.c -o erreurs
$ gdb erreurs
Vous verrez l’invite (gdb).
(gdb) r
Le programme s’arrête en cas d’erreur. Pour voir la pile d’appels :
(gdb) bt
(gdb) break erreurs.c:7
(gdb) r
(gdb) p compteur
(gdb) p sizeof(tableau)
(gdb) p tableau[0]@5
(gdb) n
(gdb) continue
(gdb) quit
Question : compilez avec gcc -Wall -Wextra erreurs.c. Quel avertissement obtenez-vous, et quel est son lien avec l’erreur ? Quel type faudrait-il donner à compteur ?
#include et les macros..o.#include <math.h>
#include <stdio.h>
float calculer_aire(float rayon) {
return M_PI * rayon * rayon;
}
int main() {
float rayon = 5.0;
float aire = calculer_aire(rayon);
printf("L'aire du cercle de rayon %.2f est %.2f\n", rayon, aire);
return 0;
}
# Préprocesseur
gcc -E aire.c -o aire.i
# Compilation
gcc -O2 -S aire.i -o aire.s
# Assemblage
gcc -c aire.s -o aire.o
# Edition de liens
gcc aire.o -lm -o aire
# Exécution
./aire
Le programme sphere est réparti sur plusieurs fichiers :
sphere.h : prototypes des fonctionssurface.c : fonctions surfacevolume.c : fonctions volumemain.c : programme principalCompilez-le étape par étape, puis modifiez uniquement volume.c et observez quels fichiers doivent être recompilés.
# Préprocesseur
gcc -E main.c -o main.i
gcc -E volume.c -o volume.i
gcc -E surface.c -o surface.i
# Compilation avec optimisation
gcc -O3 -c main.i -o main.o
gcc -O3 -c volume.i -o volume.o
gcc -O3 -c surface.i -o surface.o
# Edition de liens
gcc main.o volume.o surface.o -lm -o sphere
# Exécution
./sphere
Objectifs :
Instructions :
Écrire un programme chaine.c qui demande à l’utilisateur deux chaînes et applique les trois opérations. Les résultats doivent être affichés.
Objectif : Écrire un programme bd_ecole.c pour gérer les données de 5 étudiant.e.s.
struct pour l’étudiant (nom, prénom, adresse, notes).strcpy).Objectif : Écrire un programme phrases.c pour rechercher une phrase dans un fichier.
fopen, fgets, fclose).Objectif : Écrire un programme couleurs.c qui stocke 100 couleurs (R, G, B, A) et affiche les couleurs distinctes avec leur nombre d’occurrences.
Couleur.Écrivez un programme en C nommé chercher.c qui contient un tableau de 10 phrases (tableau de tableaux de caractères) et qui recherche si une phrase donnée est présente dans le tableau. L’objectif est de réaliser cette recherche sans utiliser les fonctions de bibliothèques standards ou externes.
Exemple: Supposons que le tableau contienne les phrases suivantes :
"Bonjour, comment ça va ?"
"Le temps est magnifique aujourd'hui."
"C'est une belle journée."
"La programmation en C est amusante."
"Les tableaux en C sont puissants."
"Les pointeurs en C peuvent être déroutants."
"Il fait beau dehors."
"La recherche dans un tableau est intéressante."
"Les structures de données sont importantes."
"Programmer en C, c'est génial."
Si on recherche la phrase La programmation en C est amusante., le programme doit afficher Phrase trouvée. Si on recherche Je préfère le Python., le programme doit afficher Phrase non trouvée.
Objectif : Créer un rapport (programmation_C.md) qui synthétise :
gcc.programmation_C.md, CONTRIBUTORS.md, README.mdaire.c, bd_ecole.c, chaine.c, chercher.c, couleurs.c, erreurs.c, main.c, phrases.c, sphere.h, surface.c, volume.cgcc -Wall -Wextra).README.md : auto-évaluation, bibliothèques utilisées, références, difficulté et commentaires.