الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

C و C++ : لغة واحدة أم لغتين؟

بدأه دحدوح في 23 نوفمبر 2008 · 8 رد · 2,251 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع
post-169219-1227437444_thumb.jpg

C و ++C : لغة واحدة أم لغتين؟

#2

لغتين .

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#3
GamingMasteR كتب:
لغتين .

ما الفرق بينهم ؟؟؟

لا تقل لى الكلاس، فالكلاس اضافة الى C (وليس تغير فى قواعد اللغة ... اضافة لما هو موجود)

اقصد ما الفرق بينهم من حيث loops - conditions - variables definition - functions structures - memory management - ... etc ؟

شكراُ مقدماً (حيث الشكر معطل :))

#4

نعم اضافة تستحق ان تكوّن فرق ملحوظ !

هناك اشياء اخرى, Google for it .

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#5

يوجد اختلاف ليس بكبير بين اللغتين , مثلا :

1- في الحجز الديناميكي , في لغة سي نستخدم الدوال malloc and free , اما في سي ++ نستخدم new and delete

2- في تعريف المتغيرات , في سي كنا نعرف المتغيرات في بداية البرنامج , اما في سي ++ نقوم بتعريف المتغيرات متى مااحتجنا لها في اي مكان بالبرنامج .

3- عند التصريح عن المتغيرات من نوع struct او enum , كنا نعيد كتابة الكلمة في السي قبل تعريف المتغيرات

 struct STRUCT_NAME a,b;

اما في السي ++ كنا نكتفي بـ :

 
 STRUCT_NAME a,b;

4- Reference , في سي ++ int &Ref=Vir , ايضا السماح بتعديل المتغيرات , في سي بواسطة المؤشرات

5- اوامر الادخال والاخراج ,في سي printf & scanf في سي ++ cout & cin

6- دوال التعامل مع الملفات .

7- التعليقات في سي كنا نستخدم /* */ في سي ++ نستخدم //

بالاضافة طبعا لـ Classes

1
llback.jpg

اشهد ان لا إله إلا الله وان محمدا ً رسول الله

#6

السلام عليكم ,,

شكراً للأخ time1 على الفروق,,

إضافة لذلك, فاللغتان لغتان مختلفتان, و الشبه بينهما يرجع لأسباب تاريخية, و السبب الرئيسي هو تأثر لغة ++C بلغة C, كما تأثرت عشرات اللغات المستخدمة حالياً في عالم البرمجة و التطوير,

لكن ما يميز لغة ++C هو أنها لم تكتفي باتباع نهج لغة C في الـ Syntax و لكنها أكملت مسيرة و مفهوم لغة C,

هناك فروق عديدة, فمن ناحية لغة ++C تعتبر ذات أنواع قوية يتم التحقق من العمليات فيما بينها وقت الترجمة كمعظم اللغات الأخرى كـ Java بينما لغة C هي لغة حرة, أي أنها تسمح بكل شيء, و ما يكتبه المبرمج هو ما يحصل بعبارة أخرى,

إضافة إلى ذلك, فإن لغة C هي لغة Procedural أو لغة إجرائية, و هذا النوع هو السهل الممتنع في عالم البرمجة, بينما لغة ++C لا تتبع منهجاً معيناً و لكنها توفر للمبرمج أدوات عدة مناهج يمكن اتباعها,

فمثلاً يمكنك اتباع طريقة الـ C و هذا ما يحصل مع المبرمجين الجدد في العادة,

إضافة إلى ذلك فإنها توفر البرمجة الكائنية, و الـ Generic Programming و كل منهج له أدواته و عدته في ++C و اختر ما يحلو لك,

لغة ++C ليست لغة كائنية المنحى OOP و لكنها توفر امكانية تطبيق هذا المنهج,

إضافة إلى ذلك و هو الأهم, ما الهدف الذي أنشأت لأجله اللغتان ؟

مثلاً لغة Java هي لغة موجهة في الغالب للـ Portable Applications و لذلك تشتهر في عالم الشبكات كما أعتقد,

لغة C تعتبر لغة برمجة عامة جداً أي أنها ليست موجهة نحو تطبيق معين في عالم البرمجة و لكنها لغة Very General و في منتصف الطريق بين اللغات عالية المستوى و اللغات منخفضة المستوى,

لغة ++C ليست عامة جداً كما هو الحال في لغة C, و لكنا صممت لحل مدى واسع من المسائل البرمجية, بالطبع هناك غمار لا تخوضها ++C و تستخدم C في برمجتها في الغالب,

فالفرق في كيفية حجز الذاكرة بين اللغتين يمكن أن يوضح هذا المفهوم, في C ليس هناك في اللغة نفسها ما لا يمكن تطبيقه دون وجود مكتبات أو وظائف عالية المستوى, أي أن ما تحتاجه لتشغيل برامج لغة C هو معالج و ذاكرة فقط

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

بالطبع معظم المقارنات بين اللغتين على الويب, هي غالباً حول الفرق في أداء اللغتين لأداء نفس المهمة,

بالطبع هذه المقارنات ليست صحيحة دائماً لأنها لم تبنى على أساس علمي في بعضها,

لغة C بطبعها لغة متوسطة المستوى, و بالتالي فهي قريبة من المعالج و الذاكرة و سريعة جداً,

و لكن في لغة ++C زيادة الأداء يكون بطرق أكثر أماناً و تعطي تلك الطرق كفاءة تفوق كفاءة C في أحيان عدة,

كـ Inlining و الـ MetaProgramming و الـ Templates و اللذان يعتبران أدوات الـ Generic Programming في لغة ++C,

لن يسعنا الحديث عن هذه الميزات في هذا الرد, أعتقد أن Google كفيل بذلك,

عموماً الناحية الوحيدة, التي ينتقدها مناصرو C هي الكائنات في لغة ++C, بالطبع لا تنسى أن برامج عملاقة كتبت بـ ++C كـ Office و غيره, و باستخدام البرمجة الكائنية على ما أعتقد.

الآن لماذا يحدث هذا البطئ المنشود عند استخدام OOP في لغة ++C هذا يمكن أن يكون مقالاً بحاله,

و في الرد القادم سأذكر بعض الأسباب :)

بالمناسبة أنا مبرمج ++C و أعرف C و لكني لم أستخدمها في مواضع كثيرة و أجد صعوبة في كتابة بعض التجارب :lol: و أعود إلى ++C من جديد,

تحياتي أخ دحدوح,

1
#7

ملاحظة: أنا لا أحب سي++ لذلك قد يأثر هذا على رأيي.

بدون تعصب، مخترع السي++ حرص على أن تكون لغته سي + إمكانية البرمجة الكانية، و رغم ذلك فغهناك فوارق و إختلافات بسيطة بينهما، و مع المعاير القياسية لسي99 و سي++2003 إزدادت الفوارق بينهما، و لكنهما شديدتا الشبه.

و في هما لغتين مختلفتين.

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

#8

لقد قرأت اكثر من مرة أن السي ++ ليست لغة موجه بالكائنات بالكامل،،، هل من مفسر لهذه المقولة؟؟

تم تعديل هذه المشاركة بواسطة mandareka في 26 نوفمبر 2008 في 23:14

دولة الخلافة الاسلامية في المخاض الاخير وميلادها قريب

حزب التحرير : التزم الطريق الصحيح الشرعي الوحيد لاعادة دولة الخلافة الاسلامية .

الامة الاسلامية متعطشة لقيادة مخلصة لتذوق حلاوة النصر ولن يكون ذلك الا بعودة الخلافة الاسلامية

الامة الاسلامية تحتاج لاحداث تسحقها سحقا وتمعسها معسا لتفكر تفكيرا جماعيا بالتغير لان وحدة المشاعر لوحدها لاتكفي وهذة الاحداث كلها خير

#9

السلام عليكم ,,,

اقتباس
لقد قرأت اكثر من مرة أن السي ++ ليست لغة موجه بالكائنات بالكامل،،، هل من مفسر لهذه المقولة؟؟

عزيزي, لغة ++C لغة يطلق عليها multiparadigm أي أنها لا تتبع اسلوباً معيناً في كتابة الكود hybrid language.

فيمكنك استخدام الاسلوب الذي يعجبك و ستوفر لك ++C المعدات العملية للأسلوب المطلوب.

لغة ++C لغة تمكنك من اتباع الأساليب التالية و أكثر!

البرمجة الخطية أو ما يسمى procedural paradigm و هذا اسلوب لغة C الوحيد

برمجة القوالب

و توفر أيضاً الـ metaprogramming paradigm

و توفر أيضاً البرمجة الكائنية و أو الاكتفاء باستخدام مفاهيم من البرمجة الكائنية دون تطبيق المفهوم بشكله الشامل,

كاستخدام الـ classes لتنظيم البيانات و ادخالها و اخراجها دون استعمال الوراثة و تعدد الأشكال و هذا يسمى data abstraction paradigm

و ربما توفر أكثر من ذلك مما لا أعرفه :)

بالنسبة لوصف لغة برمجة بأنها ليست لغة كائنية بحتة 100% فينطبق على ++C عندما نقول أن بها أنواع اساسية أو primitive,

كـ int و double و غيرها من الأنواع الأساسية في كثير من لغات البرمجة.

لأن شرط نقاء اللغة الكائنية هو أن يكون كل شيء بها عبارة عن كائنات و الأنواع الأساسية في لغة ++C ليست كائنات و إنما أنواع معرفة الحجم و العمليات.

عموماً هذا ينطبق على Java ايضاً فهي بهذا التصنيف ليست لغة برمجة كائنية بحتة :)

مهما يكن فلا تعتقد أن لغة البرمجة إن لم تكن كائنية 100% فهي ليست جيدة, فهذا ليس مقياساً :)

بل على العكس نرى أن أشهر لغتين تدرس من خلالها البرمجة الكائنية هما لغات تدعمان البرمجة الكائنية و لكن بشكل غير كامل حسب التصنيف الذي تتكلم عنه java و ++C و الشهرة أكبر لـ java بالطبع.

بالمناسبة لغة ++C متقدمة جداً من حيث دعمها للبرمجة الكائنية, فهي تتيح لك الخيار في كيفية حفظ الكائنات في الذاكرة أو الاستغناء عنهم في java سيقوم بالعمل الـ gc بدلاً من المبرمج على حساب الأداء طبعاً :wink:

الدوال بشكل افتراضي في الكائنات تربط مبكراً أي early binding و ليس وقت التشغيل إلا إن أردتهم virtual, بالطبع لكل طريقة مكانها,

الوراثة المتعددة, إعادة تعريف المعاملات operator overloading,

ما الذي تريده بعد ؟؟!!

صحيح أن لغة java هي أشهر اللغات التي يدرس بها مفهوم oop إلا أن لغة ++C هي الأشهر في عالم صناعة البرمجيات و ليس في الأروقة الأكاديمية!

تحياتي ,,

1

مواضيع مشابهة