Aller au contenu principal

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

cc
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

  1. Compilez un « Hello world » avec clang et gcc, comparez la taille de l’exécutable (ls -lh).
  2. Activez -fsanitize=address et introduisez volontairement un dépassement de tampon ; observez le rapport détaillé.
  3. Utilisez gcc -S pour générer l’assembleur et identifiez l’instruction qui appelle puts.