مقدمة: لغة واحدة — عشرات الامتدادات
\n\nإذا كنت قد بدأت للتو في تعلم لغة C++، فمن المحتمل أنك واجهت موقفًا: تنظر إلى كتاب دراسي أو مثال كود على GitHub، وتجد الملفات تُسمى إما main.cpp أو utils.cc، وأحيانًا program.cxx أو source.C. يطرح سؤال منطقي: "ما الفرق؟ هل هي لغات مختلفة؟ أم مجرد نزوة شخص ما؟"
أنت لست وحدك. على Stack Overflow، السؤال "C++ code file extension? What is the difference between .cc and .cpp" حصد مئات الآلاف من المشاهدات. وهذا ليس مفاجئًا: حتى المطورون ذوو الخبرة أحيانًا يخلطون بين هذه التفاصيل التي تبدو بسيطة. اليوم سنحل هذا اللغز مرة واحدة وإلى الأبد. ستتعرف على أصل هذه الامتدادات المختلفة، وما إذا كان هناك فرق تقني بينها، وأي امتداد يجب أن يختاره المبتدئ.
\n\nإجابة مختصرة: لا يوجد فرق تقني
\n\nدعنا نزيل التوتر الرئيسي فورًا. من وجهة نظر المترجم ولغة C++، لا يوجد أي فرق على الإطلاق بين .cc و .cpp. هما مجرد طريقتين مختلفتين لإعلام نظام التشغيل وأدوات البناء بأن أمامهم كود مصدر بلغة C++.
المترجمات (GCC, Clang, MSVC) تفهم كلا الامتدادين. يمكنك أخذ ملف hello.cc، وإعادة تسميته إلى hello.cpp وترجمته دون أي تغيير في الكود. إليك مثال بسيط:
// ملف: hello.cc\n#include <iostream>\n\nint main() {\n std::cout << "مرحبًا من ملف .cc!" << std::endl;\n return 0;\n}\n\nيمكنك ترجمته هكذا:
\ng++ hello.cc -o hello\n\nوالآن لنعيد تسميته إلى hello.cpp:
g++ hello.cpp -o hello\n\nستكون النتيجة متطابقة. المترجم لا يهتم باسم الملف — المهم فقط هو محتواه وأنك حددت اللغة بوضوح (أو أن المترجم استنتجها من الامتداد).
\n\nتاريخ النشأة: من أين جاء .cc و .cpp؟
\n\nلفهم سبب وجود العديد من الامتدادات، يجب أن ننظر إلى التاريخ. تم إنشاء C++ كامتداد للغة C. كانت المترجمات الأولى (مثل Cfront) مجرد معالجات أولية تقوم بتحويل C++ إلى C عادي.
\n\nالامتداد .cc — إرث Unix
\nفي أنظمة التشغيل من عائلة Unix (وبالأخص في الإصدارات المبكرة من AT&T Unix)، نشأ تقليد لاستخدام امتدادات قصيرة مكونة من حرفين. كان هذا بسبب قيود أنظمة الملفات: على سبيل المثال، في s5fs (System V) كان طول اسم الملف محدودًا بشدة. هكذا ظهرت:
\n- \n
.c— لملفات C \n .cc— لملفات C++ (C + C = CC) \n .h— للملفات الرأسية \n
أصبح الامتداد .cc المعيار الفعلي في عالم Unix وLinux. لا تزال العديد من المشاريع الكبيرة (مثل Google Chromium, LLVM) تستخدمه حتى اليوم.
الامتداد .cpp — عصر DOS وWindows
\nعندما بدأت C++ تكتسب شعبية في عالم الحواسيب الشخصية، ظهر نظام DOS والإصدارات المبكرة من Windows. هنا كانت القيود مختلفة، ولكن نشأت حاجة أخرى — جعل الامتداد واضحًا قدر الإمكان. .cpp يرمز إلى C Plus Plus — إشارة مباشرة إلى اللغة. أصبح هذا الامتداد شائعًا بفضل:
- \n
- بيئة التطوير Borland C++ \n
- Microsoft Visual C++ \n
- الكتب والمراجع التعليمية لـ C++ (حتى يفهم المبتدئون فورًا ما يتعاملون معه) \n
امتدادات أخرى مسافرة
\nبالإضافة إلى الامتدادين الرئيسيين، يمكنك مواجهة امتدادات أخرى في عالم C++:
\n- \n
.cxx— شكل آخر لـ "C++"، شائع في بعض أنظمة Unix (مثل IBM AIX) \n .C(حرف C كبير) — تستخدمه بعض المترجمات للتمييز بين C (.c) و C++ (.C) في الأنظمة التي تفرق بين الأحرف الكبيرة والصغيرة (مثل الأنظمة القديمة)