اتصل بـ C++ من C

Atsl B C Mn C



في البرمجة، غالبًا ما تكون هناك حاجة إلى عمل C وC++ معًا، عادةً عند تحديث تعليمات برمجية قديمة أو دمج الوحدات في لغات مختلفة. يعد استخدام كود C++ في برامج C مفيدًا جدًا للمبرمجين، خاصة عند تحديث برنامج قديم أو خلط الأجزاء المكتوبة باللغتين. سيوضح لك هذا الدليل كيفية جعل وظائف C++ تعمل مع لغة C مع أمثلة بسيطة ومفيدة. قد يبدو الاتصال بـ C++ من برنامج C أمرًا صعبًا، لكن هذه المقالة تشرح كل شيء خطوة بخطوة، لذلك من السهل المتابعة والبدء في استخدام اللغتين معًا. هذا الدليل مفيد لمشاريعك بغض النظر عن مستوى معرفتك بالبرمجة.

فهم الأساسيات

عندما يتعلق الأمر باستدعاء وظائف C++ من لغة C واستخدام كائنات C++، هناك العديد من العناصر الأساسية التي تحتاج إلى الاعتبار:

الرجوع إلى فئات C++ في C

تتضمن الطريقة الشائعة للإشارة إلى فئات C++ في لغة C استخدام مؤشرات للفئات التي يمكن تمريرها بين كود C وC++.







اسم مانجل

لمنع تغييرات الاسم التي يمكن أن تؤثر على التعرف في لغة C، من الضروري الحفاظ على اتساق الأسماء. وهذا يضمن أن لغة C يمكنها تحديد الوظائف والكائنات واستخدامها بشكل صحيح.



ملف رأس لغرض مزدوج

يلعب ملف الرأس دورًا محوريًا، حيث يخدم غرضًا مزدوجًا لكل من C وC++. يتضمن تعريفات الفئات التي يمكن التعرف عليها بواسطة C++ وتلخص وظائف الوصول لـ C.



كيفية الاتصال بـ C++ من C

لاستدعاء وظائف C++ من لغة C، يعد الإعلان الخارجي 'C' أمرًا بالغ الأهمية. عند تطبيقه على وظائف C++، فإنه يضمن معالجة أسماء الوظائف في نمط C (باستخدام C-linkage) أثناء عملية الترجمة. لا يتعرف C على ميزات C++ مثل التحميل الزائد للوظائف وتشويه الأسماء الذي يمكن أن يحدث أثناء تجميع C++. باستخدام 'C' الخارجي، يقوم مترجم C++ بإنشاء أسماء الوظائف التي تلتزم باصطلاحات C، مما يسمح بإمكانية التشغيل البيني السلس. يوفر هذا الإعلان واجهة موحدة، مما يتيح لكود C الوصول إلى وظائف C++ واستخدامها دون مواجهة تعارضات في التسمية أو مشكلات التوافق. فيما يلي أمثلة على استدعاء C++ من C. لفهم كيفية عمل هذه المجموعة، دعونا ننظر عن كثب في هذه الحالات.





أمثلة عملية: حساب مساحة الدائرة عن طريق استدعاء C++ من C

في هذا المثال البسيط، سنرشدك إلى كيفية حساب مساحة الدائرة عن طريق استدعاء دالة C++ في لغة C. يتكون هذا الرمز من ملف رأس (circle.h) وملف تنفيذ (circle.cpp). يتضمن الجزء الأول من الكود إعلان C الخارجي في ملف الرأس. انظر الكود التالي. بعد ذلك، دعونا نتناول كل سطر من التعليمات البرمجية على حدة:

#ifndef CIRCLE_AREA
#تعريف CIRCLE_AREA

خارجي 'ج' {

مزدوج Calculator_CArea ( مزدوج راد ) ;

}

#إنهاء إذا

مزدوج Circle_CArea ( مزدوج راد ) {

يعود 3.14159 * راد * راد ;

}

دعونا نحلل كل جزء:



#ifndef CIRCLE_AREA و#define CIRCLE_AREA

تعد هذه الأسطر جزءًا من أدوات الحماية التي تضمن تضمين محتويات ملف الرأس مرة واحدة فقط في عملية التجميع. إذا لم يتم تعريف CIRCLE_AREA، فسيتم تضمين الكود التالي وسيتم تعريف CIRCLE_AREA.

خارجي 'ج'

يتم استخدام بناء الجملة هذا للإعلان عن أن الوظيفة التالية لها ارتباط C. يعد هذا أمرًا ضروريًا عند كتابة التعليمات البرمجية التي سيتم استدعاؤها من كل من C وC++.

مزدوج Calculator_CArea ( مزدوج راد ) ;

يعلن هذا السطر عن دالة تسمى 'calculate_Carea' والتي تأخذ وسيطة مزدوجة (rad) وترجع مزدوجة.

يُعلم الإعلان 'C' الخارجي في ملف الرأس المترجم باستخدام رابط نمط C للوظيفة، مما يجعلها قابلة للاستدعاء من كود C. استخدم هذا الرمز للعثور على مساحة الدائرة عن طريق حفظها في ملف 'circle.h'. بمجرد حفظ ملف الرأس هذا، كل ما عليك فعله هو تضمينه كملف رأس في برنامج C++ وتنفيذ الوظيفة المطلوبة. فيما يلي رمز C الذي يحسب مساحة الدائرة. يتضمن الملف 'main.c' رأس C++ ويستدعي 'Circle_Carea' مباشرةً. انظر الكود التالي:

#تشمل 'circle.h'

كثافة العمليات رئيسي ( ) {

مزدوج راد = 5.0 ;

مزدوج منطقة = Circle_CArea ( راد ) ;

printf ( 'مساحة الدائرة هي: %.2f ' , منطقة ) ;

يعود 0 ;

}

يقوم برنامج C البسيط هذا بحساب مساحة الدائرة وطباعتها باستخدام وظيفة تم تعريفها في الملف السابق المسمى 'circle.h'. دعونا نحلل الكود:

#تشمل 'circle.h'

يتضمن هذا السطر محتوى ملف الرأس 'circle.h' في البرنامج. من المحتمل أن يحتوي ملف الرأس على إعلانات الوظائف أو وحدات الماكرو المرتبطة بحسابات الدائرة.

كثافة العمليات رئيسي ( ) {

يبدأ تنفيذ البرنامج بالوظيفة الرئيسية، وهي نقطة الدخول لبرامج لغة C.

مزدوج راد = 5.0 ;

يتم الإعلان عن متغير rad من النوع double وتعيينه بقيمة 5.0. من المحتمل أن يمثل هذا المتغير نصف قطر الدائرة.

مزدوج منطقة = Circle_CArea ( راد ) ;

يتم استدعاء دالة تسمى 'Circle_Carea' باستخدام نصف القطر rads كوسيطة ويتم تخزين النتيجة في المنطقة المتغيرة.

printf ( 'مساحة الدائرة هي: %.2f ' , منطقة ) ;

تتم طباعة النتيجة على وحدة التحكم باستخدام 'printf'. السلسلة 'مساحة الدائرة هي: %.2f\n' هي سلسلة تنسيق تحتوي على عنصر نائب '%f' لقيمة المنطقة. يحدد '.2' في '%.2f' أنه يجب عرض منزلتين عشريتين فقط.

يعود 0 ;

تنتهي الوظيفة الرئيسية بإرجاع 0 مما يشير إلى نجاح تنفيذ البرنامج في نظام التشغيل.

باختصار، يعلن ملف الرأس عن وظيفة ذات رابط C، ويحدد ملف التنفيذ المنطق لحساب مساحة الدائرة. يسمح هذا الفصل باستخدام التعليمات البرمجية في كل من برامج C وC++. ارجع إلى إخراج الكود الوارد في الصورة التالية:

كما ترون في الإخراج، فإن المساحة المحسوبة للدائرة هي 78.54 وهو حساب المساحة = 3.14*5*5 = 78.54. يتم تعريف وظيفة حساب المساحة في ملف الرأس 'circle.h' والذي يتم استدعاؤه بعد ذلك في ملف C++ بمساعدة 'C' الخارجي.

خاتمة

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