Comment utiliser le compilateur C++ en ligne
- Tapez ou collez votre code C++ dans l'éditeur. Il doit contenir un
int main(). Réinitialiser l'exemple rétablit le programme de départ. - Si votre programme lit depuis
std::cinoustd::getline, placez d'abord les données dans le champ Entrée (stdin). - Appuyez sur Exécuter, ou sur Ctrl + Entrée (⌘ + Entrée sur Mac). La page compile
main.cpp, affiche les éventuels diagnostics, puis exécute le programme. - Choisissez une limite de temps de 5, 15 ou 60 secondes. Si une exécution la dépasse, le programme est arrêté. Arrêter l'interrompt immédiatement.
Lors de la première exécution, la page télécharge la chaîne de compilation Clang, environ 30 Mo, que votre navigateur met ensuite en cache. Par la suite, compiler un programme courant prend nettement moins d'une seconde. Copier et main.cpp vous permettent de conserver votre code, A−/A+ changent la taille du texte, le bouton de disposition bascule entre des volets côte à côte et superposés, et Plein écran (Ctrl/⌘ + Maj + F, Échap pour quitter) donne toute la fenêtre à l'éditeur.
Rien n'est envoyé en ligne. Le compilateur et votre programme s'exécutent tous deux dans votre navigateur, et votre dernier code n'est enregistré que dans le stockage local de votre navigateur.
Ce qui est pris en charge
La page utilise un véritable compilateur Clang/LLVM 21, compilé pour WebAssembly par le projet YoWASP. Il compile votre code source en un programme WebAssembly (WASI) que le navigateur exécute. La commande lancée équivaut à :
clang++ main.cpp -std=c++20 -O2 -Wall -fno-exceptions -o main.wasm
- C++20 :
auto, lambdas,forsur intervalle, liaisons structurées,constexpr, concepts et initialiseurs désignés. - La bibliothèque standard de libc++ :
vector,string,map,unordered_map,set,algorithm,numeric,iostream,sstream,iomanip,optionalet le reste des conteneurs et algorithmes. - Les diagnostics propres à Clang, affichés exactement comme le compilateur les produit, avec
main.cpp:line:column, y compris les erreurs de templates et les avertissements-Wall. - Une valeur de retour non nulle de
mainest signalée par le message Le processus s'est terminé avec le code N.
Pourquoi les exceptions sont désactivées
Les exceptions C++ nécessitent dans WebAssembly une prise en charge supplémentaire à l'exécution que cette chaîne de compilation intégrée au navigateur ne fournit pas : le code est donc compilé avec -fno-exceptions. En conséquence, try, throw et catch ne sont pas pris en charge, et le code qui les utilise ne compile pas. Les fonctions de bibliothèque qui lèveraient normalement une exception, comme std::stoi sur une entrée invalide ou .at() avec un indice hors limites, ne peuvent pas non plus être interceptées ici. Vérifiez l'entrée avant de la convertir, comparez les indices à size(), ou renvoyez un std::optional pour signaler un échec :
#include <optional>
#include <string>
std::optional<int> parse(const std::string& s) {
if (s.empty()) return std::nullopt;
int v = 0;
for (char c : s) {
if (c < '0' || c > '9') return std::nullopt;
v = v * 10 + (c - '0');
}
return v;
}
Autres limitations
- Pas de threads :
std::thread,std::asyncet les pthreads ne sont pas disponibles. - Pas de réseau, pas de
fork/execet pas de vrai système de fichiers :std::ifstreamne peut donc pas lire de fichiers sur votre ordinateur. Utilisez plutôt stdin. - Pas de bibliothèques graphiques ni d'interface utilisateur comme Qt, SFML ou OpenGL. La sortie est uniquement textuelle.
- Les bibliothèques tierces comme Boost ne sont pas installées. Tout doit tenir dans l'unique fichier
main.cpp.
Le C++ moderne en quelques lignes
Le programme de départ montre les idiomes qui rendent le C++ moderne plus concis que le code des anciens manuels :
std::map<std::string, int> ages{ {"Ada", 36}, {"Linus", 54} };
for (const auto& [name, age] : ages) // liaisons structurées
std::cout << name << " is " << age << '\n';
std::vector<int> v{5, 3, 9, 1};
std::sort(v.begin(), v.end(), std::greater<>());
auto evens = std::count_if(v.begin(), v.end(), [](int x) { return x % 2 == 0; });
- Dans les boucles, préférez
'\n'àstd::endl.endlvide aussi le tampon du flux, ce qui est plus lent. - Quand vous combinez
std::cin >> netstd::getline, appelez d'abordstd::cin.ignore(), sinongetlinelit le reste de la ligne précédente comme une chaîne vide. operator[]sur unstd::mapinsère une valeur par défaut quand la clé est absente. Utilisezfindoucontains(C++20) pour rechercher une clé sans modifier la map.
Questions fréquentes
Quelle norme C++ est utilisée ?
C++20, compilé par Clang 21 avec -O2 -Wall. Le code écrit pour C++11, C++14 ou C++17 compile également.
Pourquoi mon code avec try/catch ne compile-t-il pas ?
Les exceptions sont désactivées avec -fno-exceptions. Remplacez-les par des valeurs de retour, par std::optional ou par des vérifications explicites avant l'opération risquée.
Puis-je utiliser bits/stdc++.h ?
Non. Cet en-tête est propre à GCC et n'existe pas dans libc++. Incluez les en-têtes standard dont vous avez besoin, comme <iostream>, <vector> et <algorithm>.
Existe-t-il une version en C pur ?
Oui, le compilateur C en ligne utilise le même Clang en mode C17. Vous pouvez aussi parcourir tous les compilateurs en ligne du site.
Mis à jour