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
clang
etgcc
, comparez la taille de l’exécutable (ls -lh
). - Activez
-fsanitize=address
et introduisez volontairement un dépassement de tampon ; observez le rapport détaillé. - Utilisez
gcc -S
pour générer l’assembleur et identifiez l’instruction qui appelleputs
.