Introduction au C
Progression
#Introduction au langage C
Le premier contact avec C passe par l’outillage : un éditeur de texte, un compilateur (gcc ou clang), un terminal. Contrairement aux langages gérés qui embarquent un runtime lourd, C produit un exécutable natif qui parle directement au système d’exploitation. Comprendre cette chaîne donnera de l’assurance pour la suite du module.
#1. Anatomie d’un programme minimal
1#include <stdio.h>2 3int main(void) {4 puts("Hello, C !");5 return 0;6}Cette dizaine de lignes condense plusieurs concepts. La directive #include insère la déclaration de puts pendant la phase de préprocessing. La fonction main est l’entrée officielle du programme : elle renvoie un int au système d’exploitation pour signaler son état de sortie (0 = succès). L’appel à puts écrit la chaîne sur la sortie standard, suivie d’un saut de ligne. Compiler ce fichier (gcc -std=c17 -Wall -Wextra hello.c -o hello) génère un exécutable ; l’exécuter affiche le message puis rend la main au shell.
#2. Phases de compilation
La commande précédente enchaîne quatre étapes. Le préprocesseur gère les directives (#include, #define). Le compilateur transforme le C en assembleur, l’assembleur produit un fichier objet et l’éditeur de liens (linker) résout les symboles pour construire l’exécutable final. Utilisez les options -E, -S, -c pour inspecter chaque phase et comprendre ce qui se passe sous le capot. Cette gymnastique vous servira lors du débogage ou lorsque vous optimiserez des sections critiques.
#3. Discipline de compilation
Adoptez immédiatement des options strictes : -Wall -Wextra -Wpedantic activent des diagnostics utiles, -Wconversion repère les conversions implicites dangereuses, -fsanitize=address détecte les dépassements de mémoire lors des tests. Placez ces options dans un Makefile afin de ne pas compter sur votre mémoire. Dans l’atelier de fin de chapitre, vous compilerez le même programme avec différentes options pour mesurer la taille de l’exécutable et le temps de compilation.
#Atelier
- Compilez un « Hello world » avec
clangetgcc, comparez la taille de l’exécutable (ls -lh). - Activez
-fsanitize=addresset introduisez volontairement un dépassement de tampon ; observez le rapport détaillé. - Utilisez
gcc -Spour générer l’assembleur et identifiez l’instruction qui appelleputs.