Modularité et compilation
Progression
#Modularité et compilation
Assembler un programme C structuré commence par une séparation nette entre les interfaces (.h
) et les implémentations (.c
). Nous montrons comment bâtir des modules opaques : un fichier d’en-tête expose une API minimale tandis que le fichier source conserve les détails d’implémentation. Les include guards et #pragma once
sont replacés dans une démarche de prévention des inclusions circulaires.
Le parcours suit ensuite la chaîne de compilation pas à pas. Un premier atelier demande d’observer la sortie du préprocesseur (cpp
), puis nous compilons chaque module (gcc -c
) avant de les lier (gcc module.o lib.o -o app
). Cette montée en puissance débouche sur les optimisations : que signifient -O2
ou -flto
? quelles métriques surveiller ?
Le chapitre se conclut par la mise en place d’une infrastructure de tests et d’intégration continue. Nous écrivons un Makefile couvrant les cibles test
, asan
, ubsan
et préparons un workflow GitHub Actions qui compile le projet sur Linux/macOS, exécute les tests et vérifie les analyzers. L’objectif est que chaque groupe reparte avec une ossature prête à être utilisée sur le projet Vaλisp.
#Atelier
- Factorisez le projet Vaλisp en sous-modules (
lexer
,parser
,vm
). - Écrivez un
Makefile
générique avec compilation incrémentale et cibles debug/release.