Comment utiliser le compilateur C en ligne
- Écrivez ou collez un programme C avec une fonction
maindans l'éditeur. Réinitialiser l'exemple rétablit le programme de départ. - Si le programme lit des données avec
scanf,getcharoufgets, saisissez-les dans la zone Entrée (stdin) sous la sortie avant l'exécution. - Appuyez sur Exécuter ou utilisez Ctrl + Entrée (⌘ + Entrée sur Mac). Le code est d'abord compilé puis exécuté, et les deux étapes s'affichent dans le panneau Sortie.
- Choisissez une limite de temps de 5, 15 ou 60 secondes. Une boucle infinie est interrompue quand la limite est atteinte, et Arrêter met fin immédiatement à une exécution.
La première exécution télécharge le compilateur, environ 30 Mo. Votre navigateur le met en cache, et ensuite un programme classique se compile en bien moins d'une seconde. Utilisez Copier ou main.c pour enregistrer votre fichier source, A− et A+ pour changer la taille du texte, le bouton de disposition pour placer l'éditeur et la sortie côte à côte ou l'un au-dessus de l'autre, et Plein écran (Ctrl/⌘ + Shift + F, Échap pour quitter) pour avoir plus de place.
La compilation et l'exécution ont toutes deux lieu dans votre navigateur. Votre code n'est jamais envoyé à un serveur. L'éditeur conserve votre dernier programme dans le stockage local de votre navigateur, et nulle part ailleurs.
Comment ça marche et ce qui est pris en charge
Il s'agit d'un vrai compilateur, pas d'un interpréteur qui imite le C. La page exécute Clang/LLVM 21, lui-même compilé en WebAssembly par le projet YoWASP. Clang transforme main.c en un programme WebAssembly (WASI), que votre navigateur exécute ensuite. Les options du compilateur sont :
clang main.c -std=c17 -O2 -Wall -lm -o main.wasm
- C17 avec l'optimisation (
-O2) et les avertissements courants (-Wall) activés. - La bibliothèque standard C de wasi-libc :
stdio.h,stdlib.h,string.h,ctype.h,stdint.h,time.het d'autres. La bibliothèque mathématique est liée, doncsqrt,powetsindemath.hfonctionnent sans que vous ayez à ajouter-lm. - Diagnostics exacts : les erreurs et avertissements s'affichent tels que Clang les produit, avec les positions
main.c:line:column. - Codes de sortie : si
mainrenvoie une valeur autre que 0, la sortie se termine par Le processus s'est terminé avec le code N.
Limites d'un bac à sable de navigateur :
- Pas de threads.
pthread.hn'est pas disponible. - Pas de sockets ni d'accès réseau, et pas de
forkni d'exec. - Pas de vrai système de fichiers. Vous ne pouvez pas ouvrir de fichiers de votre ordinateur : utilisez plutôt stdin ou des données dans le code source.
- Pas de bibliothèques graphiques ou d'interface comme SDL, OpenGL ou
conio.h/graphics.h. La sortie est du texte brut.
Les pièges courants du C que le compilateur vous aide à repérer
Vérifiez ce que renvoie scanf. La fonction renvoie le nombre de valeurs lues, pas la valeur elle-même. Si la zone stdin est vide ou contient du texte là où un nombre est attendu, la variable garde la valeur qu'elle avait auparavant, qui peut être indéterminée. Le programme de départ montre la façon sûre de procéder :
int n;
if (scanf("%d", &n) != 1) {
fprintf(stderr, "expected a number\n");
return 1; /* signalé comme code de sortie 1 */
}
Faites correspondre les spécificateurs de format de printf à leurs types. Utilisez %d pour int, %ld pour long, %lld pour long long, %zu pour size_t, %f pour double et %c pour un caractère. Avec -Wall, Clang signale une incohérence, par exemple l'affichage d'un double avec %d : lisez donc les avertissements même quand le programme s'exécute.
Attention au dépassement d'entier. Un int de 32 bits s'arrête à 2 147 483 647, et le dépassement d'un entier signé est un comportement indéfini en C. Avec -O2, l'optimiseur peut supposer qu'il ne se produit jamais : une boucle qui déborde peut donc se comporter bizarrement au lieu de simplement repasser aux valeurs négatives. Utilisez long long (ou int64_t de stdint.h) pour les factorielles, les grandes sommes et les produits.
long long f = 1;
for (int i = 2; i <= 20; i++) f *= i;
printf("20! = %lld\n", f); /* 2432902008176640000 */
#include, par exemple stdlib.h pour malloc ou string.h pour strlen.Questions fréquentes
Quel compilateur et quelle norme C sont utilisés ?
Clang 21 (LLVM) en mode C17, avec -O2 -Wall. La plupart des programmes écrits pour GCC se compilent sans modification, tant qu'ils s'en tiennent au C standard et évitent les en-têtes propres à une plateforme.
Mon code est-il envoyé quelque part ?
Non. Le compilateur lui-même s'exécute dans votre navigateur : le code source, le programme compilé et sa sortie restent tous sur votre appareil.
Comment fournir des données d'entrée à mon programme ?
Saisissez-les dans la zone stdin avant d'appuyer sur Exécuter. Les valeurs peuvent être séparées par des espaces ou des retours à la ligne, comme lorsque vous les tapez dans un terminal. Quand l'entrée est épuisée, scanf renvoie EOF.
Pourquoi mon programme s'arrête-t-il avec un message de limite de temps ?
Il a tourné plus longtemps que la limite choisie, ce qui indique généralement une boucle qui ne se termine jamais. Vérifiez la condition de la boucle, ou choisissez 60 s pour des calculs vraiment longs.
Puis-je compiler du C++ ici ?
Utilisez le compilateur C++ en ligne, qui exécute le même Clang en mode C++20. Pour les autres langages, consultez tous les compilateurs en ligne.
Mis à jour