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

[تمت الإجابة] هل نعتبر تعليمات الـpreProcessor جزءاً من اللغة ؟

بدأه مصطفى 36a2 في 7 نوفمبر 2013 · 6 رد · 627 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

من المعروف أن مراحل تفسير الكود بلغة الـC/C++ تبدأ بتفسير التعليمات الخاصة بالمصرّف والتي تبدأ بـ#
فهل هذه التعليمات تُعتبر جزءاً من اللغة ؟ أم أنها مُكمّل خاص بالمصرّف ؟ يمكنني تحديد السؤال لـ #include فقط .. فبدونها لا يمكن كتابة أي برنامج ذو فائدة .

السؤال محيّر..

فلو كانت جزءاً من اللغة , فلماذا ليس لها قواعد واضحة في مراجع اللغة, كما أن هذا يعني أن اللغة  ليست مجرّدة عن الآلة بالكامل وهذا بحد ذاته سؤال !

وإن كانت ليست جزءاً من اللغة ! فكيف يمكن كتابة أي برنامج بدونها ؟ وهل سنعتبر اللغة قاصرة بدون مصرّفها ؟

وشكراً

تم تعديل هذه المشاركة بواسطة مصطفى 36a2 في 7 نوفمبر 2013 في 22:04 — السبب: #include

#2
اقتباس
من المعروف أن مراحل تفسير الكود بلغة الـC/C++ تبدأ بتفسير التعليمات الخاصة بالمصرّف والتي تبدأ بـ#

هذه مرحلة متقدمه، فى الحقيقة هذه هى الخطوة رقم 4 من أصل 9.

 

اقتباس
فهل هذه التعليمات تُعتبر جزءاً من اللغة ؟

نعم هي كذلك.

 

اقتباس
فلو كانت جزءاً من اللغة , فلماذا ليس لها قواعد واضحة في مراجع اللغة

هذا غير صحيح، فقواعد الـ Preproccessor محددة و صارمة بالـ Standard و ستجدها بالفصل 16 تحت أسم Preprocessing directives.

 

اقتباس
وإن كانت ليست جزءاً من اللغة ! فكيف يمكن كتابة أي برنامج بدونها ؟ وهل سنعتبر اللغة قاصرة بدون مصرّفها ؟

سيصبح الأمر صعب جدا لدرجة ستجعلك تكره اللغه و حينها سيقتصر الأمر على كتابة كافة الكود الذى تريده داخل أكثر من translation unit و الإعتماد على external linkage للبرط بين الأكواد من خلال الـ linker.

 

 

و الله ولي التوفيق

1

مدونتي: C++ Tips and Tricks

#3

السلام عليكم ..

  1. يحصل هذا اللالتباس كون معظم المترجمات تعمل كـــ Preprocessor  و Compiler  مثل (gcc)   أي تقوم بالمهمتين معا .
  2. مع العلم انه يوجد PreProcessor  منفصل للغة الــ C  و اسمه cpp  اختصار لـــ (C Pre Processor ) و حيث يطبع لنا الملف الناتج بعد ان يقوم بمعالجة الـــ Macros  و الـــ Includes  .مثال : 
    cpp a.c

    حتى لو كان الكود المصدري فيه خطأ .

  3.  

    بعض المراجع تستخدم مصطلح PrpProcessing Language  مما يوحي لنا بإنها لغة منفصلة عن لغة البرمجة .http://gcc.gnu.org/onlinedocs/cpp/The-preprocessing-language.html

  4. عمليا , يتم إصدار الــ Specification  الخاصة باللغة مع الــ PreProcessor Directives  الخاصة بها في مرجع واحد .. و لا يتم الفصل بينهما ..

     

     

     

     

تم تعديل هذه المشاركة بواسطة حسام الشامي في 8 نوفمبر 2013 في 01:51

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#4

أخي C++er

شكرا جزيلاً لك ..

هذا هو رابط الفقرة التي أشرت إليها
في الحقيقة إجابتك توصلني إلى جوهر السؤال وهو أن مخترع C قام بتصميم الpreProcesses كجزء من اللغة وهذا زيادة في الإبداع يعني .. وليست من اختراع من صنع المصرّفات .. هذا ما وصلت إليه من الإجابة !

________________________

أخي حسام شكرا لك

1- وهذا دفعني للاعتقاد بأن الـ Compiler يقوم بعمل implementation لتنفيذ فكرة اللغة النظرية .. أما PreProcessor فهو شيء مستجد .. وهذا خطاً فكلاهما يعملان على تنفيذ فكرة اللغة (أقصد تحويل المجرد لملموس )

2- هذا ما أتوقّعه .. سيكون من الممتع رؤية الكود بعد تنفيذ أوامر الpp  :)

3- سمعت مرة بذلك .. ويقولون بأن لغة الـ pp ليست Turing Complete فهي لا تحقق شروط آلة Turing ... 

4- هو كذلك ... إلى هناك أتجه .

 

جزاكما الله خيراً

تم تعديل هذه المشاركة بواسطة مصطفى 36a2 في 8 نوفمبر 2013 في 01:43

#5

شكرا لك أخ مصطفى .. شكرا لك اخ C++er ..

تم تصحيح الرابط .

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#6
اقتباس

هذه مرحلة متقدمه، فى الحقيقة هذه هى الخطوة رقم 4 من أصل 9.

 

في المجمل, كنت أعتقد أنها 5 مراحل فقط :rolleyes:

Preprocessor -> Compiler -> Assembler -> Linker -> Loader

#7
اقتباس
Preprocessor -> Compiler -> Assembler -> Linker

تلك اقسام المترجم و هذا الاسلوب موجهه لمبرمجي اللغه و ليس مصمميها، أما مراحل الترجمه فهي الخطوات التى يمر بها الكود حتى يصل الي النتيجة المطلوبة* من وجهة نظر كاتب المترجم و لا يشترط التوثيق ان يكونوا 9 و لكن لابد ان تكون النتجة كما لو ان الـ 9 مراحل قد تم تنفيذهم بهذا الترتيب.

 

ستجد هذه المراحل فى الفصل الثاني النقطه الثانية و الفصل بأكمله يشرح الـ Lexical conventions الخاصة بلغة cpp.

 

*النتيجة المطلوبة قد تكون ملف الكود بعد حذف الـ Preprocessing directives أو ملف تنفيذى او ملف ثنائي (يوجد فرق) او مكتبة استاتيكية أو ... أو ....

 

 

و الله ولي التوفيق

1

مدونتي: C++ Tips and Tricks

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…