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

ما الفرق بين if و #if؟ وما هي فكرة استعمالها؟ وهل هناك إختلاف في السرعه؟

بدأه faisal_01 في 1 يونيو 2016 · 2 رد · 1,518 مشاهدة · في لغة C و ++C
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

أحبتي أود أن أسأل عن الدوال التي تبدأ بشارب مثلا #if و #define وغيرها هل من شرح لكيفية التعامل مع هذه الدول وأكون شاكر لوضُمنت بأمثله سهله.

تم تعديل هذه المشاركة بواسطة faisal_01 في 1 يونيو 2016 في 19:14

#2

لا تسمى if ولا #if دوال، الأولى جزء من تصريح if statement (الـif نفسها كلمة محجوزة reserved word) والثانية توجيه للمعالج المسبق preprocessor directive، تسمى # هاش أو رمز الرقم أو الشباك، وليست شارب ♯.

المترجم في C/C++ في أبسط صورة يمكن أن يقوم بالترجمة على مرحلتين (الواقع أكثر تعقيد)، مرحلة المعالجة المسبقة ومرحلة الترجمة الفعلية، حيث يأخذ المترجم البرنامج الذي تعطيه إياه ويمرره أولاً للمعالج المسبق الذي يفهم التوجيهات التي تبدأ بـ#، بعدما ينفذ المعالج المسبق هذه التوجيهات، سينتج ملف جديد وهو ماستتم ترجمته في النهاية.

فمثلاً لو كتبت:

#define NUM 1

	int main()

	{

	#if 0

	  puts("ABC");

	#endif

	  return NUM

	}


سيحولها المعالج المسبق إلى مايشبه:

int main()

	{

	  return 1

	}


لاحظ أن NUM استبدلت بـ1 وأزيلت puts، وهذا ماستتم ترجمته في النهاية، أي أن التوجيهات ليست سوى لغة مصغرة لتحويل ملف البرنامج قبل أن يترجم.

يمكن أن تستخدم #define مثلاً لتعريف الثوابت مثل π، و #if تستخدم مثلاً إذا أردت لجزء معين من الكود وظيفته الـdebugging أن يزال عندما تريد نشر البرنامج، هذه فقط بعض الاستخدامات.

لكن لايمكن أن تستخدم if بدل #if أو العكس، فكلاً منهما يستخدم لغرض مختلف.

اطلع على كتاب لغة C الشامل الصفحة 185، ستجد فصل عن المعالجة المسبقة.

2
#3

المرجع والشرح أكثر من مميز شكراً أخي على الإهتمام

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

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

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

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

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