Le problème des headers est qu'ils sont interprétés des tonnes de fois. Même avec des gardes, c'est lu et relu pour chaque unité de compilation les utilisant. Sur des gros projets ou de grosses dépendances ça se sent.
De plus le résultat de l'interprétation peut varier d'une unité de compilation à l'autre selon les paramètres du préprocesseur.
// header.hpp#pragma once#ifdef FOOusingbar=int;#elseusingbar=char;#endif// 1.cpp#include"header.hpp"static_assert(std::is_same_v<bar,char>)// 2.cpp#define FOO // ou -DFOO sur la ligne de commande#include"header.hpp"static_assert(std::is_same_v<bar,char>)// Perdu, bar est int.
[^] # Re: Quel est l'intérêt ?
Posté par Julien Jorge (site web personnel) . En réponse au journal C++ vin va vous faire tourner en barrique !. Évalué à 9.
Le problème des headers est qu'ils sont interprétés des tonnes de fois. Même avec des gardes, c'est lu et relu pour chaque unité de compilation les utilisant. Sur des gros projets ou de grosses dépendances ça se sent.
De plus le résultat de l'interprétation peut varier d'une unité de compilation à l'autre selon les paramètres du préprocesseur.
Les modules sont une réponse à ces problèmes.