كيف تستخدم مترجم C++ عبر الإنترنت
- اكتب شيفرة C++ أو الصقها في المحرّر. ويجب أن تحتوي على
int main(). ويعيد زر إعادة ضبط المثال البرنامج التمهيدي. - إذا كان برنامجك يقرأ من
std::cinأوstd::getline، فضع المدخلات أولًا في مربع المُدخلات (stdin). - اضغط تشغيل، أو Ctrl + Enter (⌘ + Enter على Mac). تترجم الصفحة الملف
main.cpp، وتعرض أي رسائل تشخيصية، ثم تشغّل البرنامج. - اختر الحدّ الزمني: 5 أو 15 أو 60 ثانية. وعندما يتجاوزه التشغيل، يتوقف البرنامج. ويُنهيه زر إيقاف فورًا.
في أول تشغيل، تنزّل الصفحة حزمة أدوات Clang بحجم 30 MB تقريبًا، ثم يحتفظ بها متصفحك في ذاكرة التخزين المؤقت. وبعد ذلك، تستغرق ترجمة برنامج نموذجي أقل من ثانية بكثير. ويتيح لك زرا نسخ وmain.cpp الاحتفاظ بشيفرتك، ويغيّر A−/A+ حجم النص، ويبدّل زر التخطيط بين التخطيط المتجاور والتخطيط المكدّس، ويمنح ملء الشاشة (Ctrl/⌘ + Shift + F، وEsc للخروج) المحرّرَ النافذة كلها.
لا يُرفع أي شيء. فالمترجم وبرنامجك يعملان كلاهما داخل متصفحك، وتُحفظ أحدث نسخة من شيفرتك في التخزين المحلي لمتصفحك فقط.
ما الذي يدعمه المترجم
تستخدم الصفحة مترجم Clang/LLVM 21 حقيقيًا، مبنيًا لـ WebAssembly بواسطة مشروع YoWASP. وهو يترجم شيفرتك المصدرية إلى برنامج WebAssembly (WASI) ينفّذه المتصفح. والأمر الذي يشغّله يعادل:
clang++ main.cpp -std=c++20 -O2 -Wall -fno-exceptions -o main.wasm
- C++20:
auto، وتعابير lambda، وحلقةforالقائمة على النطاق، والربط المهيكل (structured bindings)، وconstexpr، والمفاهيم (concepts)، والمُهيِّئات المعيَّنة (designated initialisers). - المكتبة القياسية من libc++:
vector، وstring، وmap، وunordered_map، وset، وalgorithm، وnumeric، وiostream، وsstream، وiomanip، وoptional، وبقية الحاويات والخوارزميات. - رسائل Clang التشخيصية الأصلية، مطبوعة تمامًا كما يُبلغ عنها المترجم مع
main.cpp:line:column، بما فيها أخطاء القوالب (templates) وتحذيرات-Wall. - تُعرض القيمة المُعادة غير الصفرية من
mainعلى هيئة انتهت العملية بالرمز N.
لماذا عُطّلت الاستثناءات
تحتاج استثناءات C++ إلى دعم إضافي وقت التشغيل في WebAssembly لا توفّره أدوات الترجمة هذه داخل المتصفح، لذا تُترجم الشيفرة مع الخيار -fno-exceptions. ونتيجةً لذلك، لا تُدعم try وthrow وcatch، وتفشل ترجمة الشيفرة التي تستخدمها. ولا يمكن هنا أيضًا التقاط أخطاء دوال المكتبة التي ترمي استثناءً في العادة، مثل std::stoi مع مدخل غير صالح، أو .at() مع فهرس خارج النطاق. لذا تحقّق من المدخل قبل تحويله، وقارن الفهارس بـ size()، أو أعِد std::optional للإشارة إلى الفشل:
#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;
}
قيود أخرى
- لا توجد خيوط تنفيذ (threads): فلا تتوفر
std::threadولاstd::asyncولا pthreads. - لا شبكة، ولا
fork/exec، ولا نظام ملفات حقيقي، لذا لا يستطيعstd::ifstreamقراءة الملفات من حاسوبك. استخدم stdin بدلًا من ذلك. - لا توجد مكتبات رسوميات أو واجهات رسومية مثل Qt أو SFML أو OpenGL. والمخرجات نصية فقط.
- المكتبات الخارجية مثل Boost غير مثبّتة. ويجب أن يكون كل شيء في ملف
main.cppواحد.
C++ الحديثة في بضعة أسطر
يعرض البرنامج التمهيدي الأساليب التي تجعل C++ الحديثة أقصر من الشيفرة القديمة في الكتب الدراسية:
std::map<std::string, int> ages{ {"Ada", 36}, {"Linus", 54} };
for (const auto& [name, age] : ages) // structured bindings
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; });
- فضّل
'\n'علىstd::endlداخل الحلقات. فـendlيفرّغ مخزن التدفق المؤقت أيضًا، وهذا أبطأ. - عند الجمع بين
std::cin >> nوstd::getline، استدعِstd::cin.ignore()أولًا، وإلا فستقرأgetlineبقية السطر السابق على أنها سلسلة فارغة. - يُدرج
operator[]علىstd::mapقيمة افتراضية عندما يكون المفتاح غير موجود. استخدمfindأوcontains(C++20) للبحث عن مفتاح دون تغيير الـ map.
الأسئلة الشائعة
ما معيار C++ المستخدم؟
C++20، بترجمة Clang 21 مع -O2 -Wall. وتُترجم أيضًا الشيفرة المكتوبة لـ C++11 أو C++14 أو C++17.
لماذا لا تُترجم شيفرتي التي تحتوي على try/catch؟
الاستثناءات معطّلة بالخيار -fno-exceptions. استبدلها بقيم مُعادة، أو std::optional، أو بفحوص صريحة قبل العملية المحفوفة بالخطر.
هل يمكنني استخدام bits/stdc++.h؟
لا. هذا الملف الرأسي خاص بـ GCC ولا وجود له في libc++. أدرج الملفات الرأسية القياسية التي تحتاجها، مثل <iostream> و<vector> و<algorithm>.
هل توجد نسخة للغة C العادية؟
نعم، يستخدم مترجم C عبر الإنترنت المترجم Clang نفسه في وضع C17. ويمكنك أيضًا تصفّح كل المترجمات البرمجية عبر الإنترنت على الموقع.
آخر تحديث