Minifier du code C et C++ en ligne

Allégez un fichier C ou C++ sans changer ce que voit le compilateur : mêmes jetons, macros intactes. Les numéros de ligne peuvent être conservés pour des messages d’erreur exacts.

Niveau de protection

Réglages détaillés

Traitement 100 % local, rien n’est envoyé

Comment ça marche ?

L’outil retire commentaires, lignes vides et espaces superflus, sans changer ce que voit le compilateur : la suite de jetons est strictement la même. Il comprend les chaînes et caractères avec échappements, les chaînes brutes R"x(…)x", les séparateurs de chiffres (1'000), les raccords de lignes \ et les directives du préprocesseur (#include, #define, #pragma), qui gardent leur propre ligne.

Il n’y a pas de renommage : sans compilateur, on ne sait pas ce qu’un nom désigne. L’option « Conserver les numéros de ligne » garde une ligne de sortie par ligne d’origine, pour des messages du compilateur ou des points d’arrêt exacts.

Exemples

Un programme : 142 octets deviennent 92

Un main avec 2 commentaires devient int main(){std::cout<<"Salut // pas un commentaire"<<std::endl;return 0;} : la chaîne contenant // est intacte, et #include garde sa ligne.

Lignes conservées : 36 octets deviennent 18

Avec « Conserver les numéros de ligne », int a = 1; // un puis int b = 2; // deux donnent int a=1; et int b=2; : la ligne 2 reste la ligne 2.

Questions fréquentes

Pourquoi les variables ne sont-elles pas renommées pour ce langage ?
Renommer sans risque exige de savoir ce que chaque nom désigne. En Ruby (introspection, `send`, `eval`) comme en C et C++ (macros, modèles, surcharges), cela suppose d’exécuter ou de compiler le programme, ce qu’un outil dans le navigateur ne peut pas faire. L’outil se limite donc à ce qui est certain : commentaires, lignes vides, espaces.
Comment savez-vous que le compilateur voit le même code ?
Les jetons produits par le lexeur de clang sont comparés avant et après sur plus de 650 fichiers d’en-têtes réels (bibliothèque standard comprise) : ils sont identiques, directives et macros comprises.
Que deviennent les espaces dans les macros ?
Les directives sont réduites avec précaution : #define A (1) (macro simple) et #define A(x) (macro à paramètres) restent distinctes, #pragma et #error sont recopiés tels quels, et chaque directive garde sa ligne.
Mon code est-il envoyé quelque part ?
Non. Le traitement se fait dans votre navigateur, dans un worker : votre code n’est ni envoyé, ni enregistré, et aucune requête n’est faite pendant la réduction. Seuls les moteurs sont téléchargés : esbuild (JavaScript, TypeScript, CSS) est servi par ce site, et l’interpréteur Python (environ 13 Mo, une seule fois) vient de jsDelivr, vérifié par une empreinte SHA-256 avant d’être utilisé.