C++ عبر الإنترنت - IDE ومحرر ومترجم ومفسّر

ترجم كود C++20 وشغّله عبر الإنترنت بـ Clang يعمل في متصفحك: حاويات STL والخوارزميات و iostream وإدخال stdin. بدون تسجيل، ولا يُرفع شيء.

C++20 (Clang 21, WebAssembly) · يعمل في متصفحك، لذا لا تصل شيفرتك إلى خوادمنا أبدًا.
main.cppC++
المخرجات

            
المُدخلات (stdin)، تُقرأ بواسطة scanf / std::cin / getline
Ctrl/⌘ + Enter للتشغيل

ميزات مترجم C++ عبر الإنترنت (بيئة تطوير ومحرّر ومفسّر)

اكتب شيفرة C++ وشغّلها واختبرها عبر الإنترنت مجانًا. تعمل هذه الصفحة كبيئة تطوير C++ ومحرّر شيفرة ومترجم ومفسّر في آن واحد: اكتب شيفرتك، واضغط «تشغيل»، وشاهد المخرجات فورًا. كل شيء يعمل في متصفحك، دون أي تثبيت ودون إنشاء حساب.

  • تشغيل الشيفرة فورًا: C++20 (Clang 21, WebAssembly)، مع ظهور المخرجات في أقل من ثانية بعد التحميل الأول.
  • محرّر الشيفرة: تلوين الصياغة، وأرقام الأسطر، ومطابقة الأقواس، والإغلاق التلقائي للأقواس.
  • مُدخلات البرنامج (stdin): اكتب المُدخلات التي يقرؤها برنامجك قبل تشغيله.
  • أخطاء واضحة: تظهر رسائل الخطأ والتحذيرات في لوحة المخرجات، كما تظهر على حاسوبك.
  • ملء الشاشة: Ctrl/⌘ + Shift + F، وحجم خط قابل للتعديل، وتخطيط متجاور أو مكدّس، ولوحات قابلة لتغيير الحجم.
  • الحفظ التلقائي: تُحفظ شيفرتك في متصفحك؛ نزّلها باسم main.cpp أو انسخها بنقرة واحدة.
  • تجربة آمنة: حدّ زمني وزر إيقاف ينهيان الحلقات اللانهائية.
  • خاص: تعمل بيئة تشغيل C++ على جهازك، لذا لا تُرفع شيفرتك أبدًا.
  • الوضع الداكن واختصارات لوحة المفاتيح: Ctrl/⌘ + Enter يشغّل الشيفرة.
  • مجاني: بدون تسجيل، وبلا حدود للاستخدام.

تعلّم لغات برمجة أخرى

كيف تستخدم مترجم C++ عبر الإنترنت

  1. اكتب شيفرة C++ أو الصقها في المحرّر. ويجب أن تحتوي على int main(). ويعيد زر إعادة ضبط المثال البرنامج التمهيدي.
  2. إذا كان برنامجك يقرأ من std::cin أو std::getline، فضع المدخلات أولًا في مربع المُدخلات (stdin).
  3. اضغط تشغيل، أو Ctrl + Enter (⌘ + Enter على Mac). تترجم الصفحة الملف main.cpp، وتعرض أي رسائل تشخيصية، ثم تشغّل البرنامج.
  4. اختر الحدّ الزمني: 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. ويمكنك أيضًا تصفّح كل المترجمات البرمجية عبر الإنترنت على الموقع.

آخر تحديث

تم النسخ إلى الحافظة