كيف تستخدم مترجم C عبر الإنترنت
- اكتب برنامج C أو الصقه في المحرر، على أن يحتوي على الدالة
main. ويعيد زر إعادة ضبط المثال البرنامج التمهيدي. - إذا كان البرنامج يقرأ مدخلات باستخدام
scanfأوgetcharأوfgets، فاكتبها في مربع المُدخلات (stdin) أسفل المخرجات قبل التشغيل. - اضغط تشغيل أو استخدم Ctrl + Enter (⌘ + Enter على Mac). تُترجَم الشيفرة أولًا ثم تُنفَّذ، وتُعرض نتيجة الخطوتين في لوحة المخرجات.
- اختر الحدّ الزمني: 5 أو 15 أو 60 ثانية. تُوقَف الحلقة اللانهائية عند انتهاء المهلة، ويُنهي زر إيقاف التشغيل فورًا.
في التشغيل الأول يُنزَّل المترجم، وحجمه نحو 30 MB. يحتفظ به متصفحك في ذاكرته المؤقتة، وبعد ذلك يُترجَم البرنامج المعتاد في أقل من ثانية بكثير. استخدم نسخ أو main.c لحفظ ملف الشيفرة المصدرية، وA− وA+ لتغيير حجم النص، وزر التخطيط لوضع المحرر والمخرجات جنبًا إلى جنب أو أحدهما فوق الآخر، وملء الشاشة (Ctrl/⌘ + Shift + F، وEsc للخروج) لمساحة أكبر.
تتم الترجمة والتنفيذ كلاهما داخل متصفحك. لا تُرسَل شيفرتك إلى أي خادم أبدًا. ويحفظ المحرر آخر برنامج كتبته في التخزين المحلي لمتصفحك، ولا يحفظه في أي مكان آخر.
كيف يعمل المترجم وما الذي يدعمه؟
هذا مترجم حقيقي، وليس مفسّرًا يحاكي لغة C. تشغّل الصفحة Clang/LLVM 21، وهو نفسه مترجَم إلى WebAssembly بواسطة مشروع YoWASP. يحوّل Clang الملف main.c إلى برنامج WebAssembly (WASI) يشغّله متصفحك بعد ذلك. وخيارات المترجم هي:
clang main.c -std=c17 -O2 -Wall -lm -o main.wasm
- C17 مع تفعيل التحسين (
-O2) والتحذيرات الشائعة (-Wall). - مكتبة C القياسية من wasi-libc:
stdio.hوstdlib.hوstring.hوctype.hوstdint.hوtime.hوغيرها. ومكتبة الرياضيات مربوطة، لذا تعملsqrtوpowوsinمنmath.hدون أن تضيف-lmبنفسك. - رسائل تشخيص دقيقة: تُعرض الأخطاء والتحذيرات كما يطبعها Clang، مع مواضعها بصيغة
main.c:line:column. - رموز الخروج: إذا أعادت
mainقيمة غير 0، تنتهي المخرجات بعبارة انتهت العملية بالرمز N.
قيود بيئة المتصفح المعزولة:
- لا خيوط تنفيذ (threads). المكتبة
pthread.hغير متاحة. - لا مقابس (sockets) ولا وصول إلى الشبكة، ولا
forkأوexec. - لا نظام ملفات حقيقي. لا يمكنك فتح ملفات على حاسوبك، فاستخدم stdin أو بيانات داخل الشيفرة المصدرية بدلًا من ذلك.
- لا مكتبات رسوميات أو واجهات رسومية مثل SDL أو OpenGL أو
conio.h/graphics.h. المخرجات نص عادي.
أخطاء شائعة في C يساعدك المترجم على اكتشافها
تحقّق مما تُعيده scanf. فهي تُعيد عدد القيم التي قرأتها، لا القيمة نفسها. وإذا كان مربع stdin فارغًا أو يحتوي نصًا حيث يُتوقع رقم، يحتفظ المتغير بأي قيمة كانت فيه من قبل، وقد تكون قيمة عشوائية لا معنى لها. ويُظهر البرنامج التمهيدي الطريقة الآمنة:
int n;
if (scanf("%d", &n) != 1) {
fprintf(stderr, "expected a number\n");
return 1; /* reported as exit code 1 */
}
طابِق محدِّدات التنسيق في printf مع أنواعها. استخدم %d لـint، و%ld لـlong، و%lld لـlong long، و%zu لـsize_t، و%f لـdouble، و%c للحرف. ومع -Wall يحذّرك Clang من عدم التطابق، مثل طباعة double باستخدام %d، فاقرأ التحذيرات حتى لو اشتغل البرنامج.
انتبه إلى تجاوز سعة الأعداد الصحيحة. يتوقف int ذو 32 بت عند 2,147,483,647، وتجاوز السعة في الأعداد ذات الإشارة سلوك غير معرَّف في C. ومع -O2 قد يفترض المحسِّن أن ذلك لا يحدث أبدًا، فتتصرف الحلقة التي تتجاوز السعة تصرفًا غريبًا بدلًا من أن تلتفّ القيمة ببساطة. استخدم long long (أو int64_t من stdint.h) للمضروبات والمجاميع والنواتج الكبيرة.
long long f = 1;
for (int i = 2; i <= 20; i++) f *= i;
printf("20! = %lld\n", f); /* 2432902008176640000 */
#include، مثل stdlib.h لـmalloc أو string.h لـstrlen.الأسئلة الشائعة
ما المترجم ومعيار C المستخدمان هنا؟
Clang 21 (LLVM) في وضع C17، مع -O2 -Wall. وتُترجَم معظم الشيفرات المكتوبة لـGCC دون تعديل، ما دامت تلتزم بلغة C القياسية وتتجنب ملفات الترويسة الخاصة بمنصة معيّنة.
هل تُرفع شيفرتي إلى أي مكان؟
لا. المترجم نفسه يعمل داخل متصفحك، لذا تبقى الشيفرة المصدرية والبرنامج المترجَم ومخرجاته كلها على جهازك.
كيف أعطي برنامجي مدخلات؟
اكتبها في مربع stdin قبل الضغط على «تشغيل». ويمكن الفصل بين القيم بمسافات أو بأسطر جديدة، تمامًا كما تكتبها في الطرفية. وعند نفاد المدخلات، تُعيد scanf القيمة EOF.
لماذا يتوقف برنامجي برسالة عن انتهاء الحدّ الزمني؟
لأنه استغرق وقتًا أطول من المهلة المختارة، وهذا يشير عادةً إلى حلقة لا تنتهي. راجع شرط الحلقة، أو اختر 60 s للعمليات الحسابية الطويلة فعلًا.
هل يمكنني ترجمة C++ هنا؟
استخدم مترجم C++ عبر الإنترنت، الذي يشغّل Clang نفسه في وضع C++20. وللغات الأخرى، اطّلع على جميع المترجمات البرمجية عبر الإنترنت.
آخر تحديث