C preprocessor الجزء 3

الجزء الأول - الجزء الثاني

سنتعرف في الجزء الثالث والأخير على استخدام C preprocessor في الترجمة الشرطية conditional compilation والتي تفيد في جعل الكود قابل لإعطاء بعض الشروط للمترجم كما سنرى. وسنختم هذا الجزء بمثال عملي حقيقي على استخدام الـ C preprocessor .

ملاحظة:الأمثلة الوارد في هذا الجزء مأخوذة من المصادر الموضوعة في النهاية.

الترجمة الشرطية conditional compilation

تستخدم الأوامر if, ifdef, ifndef, else, elif ,endif في الترجمة الشرطية.

1-#if … #endif

إن if و endif تحويان كود برمجي ينفذ عندما يكون الوسيط بعد if له قيمة غير صفرية، مثال:

وليس بالضروري أن يكون الكود بين if و endif هو من أوامر C preprocessor إذا يمكن أن نكتب أي كود نريد. وبالتالي يمكن استخدام هذه الخاصية أيضاً في جعل الكود قابل لإعادة الاستخدام أو التخصيص عبر المطور.

2-#elif … #else

  تستخدم else لتوجيه المترجم لكود آخر في حال عدم تحقق شرط if

أما elif فهي تختلف عن else بوجود شرط تقوم بتفحصه، مثال:

 

3-#ifdef … #ifndef

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

يمكن استخدام الC preprocessor من أجل تمرير رسائل معينة لإظهارها أثناء الترجمة في حال حدوث شرط معين، مثال:

ففي الكود السابق يقوم بتفحص رمز سابق (معرّف مسبقاً لدى المترجم) وفي حال لم يكن بقيمة معينة فإنه يظهر رسالة إلى المستخدم.

مثال عملي

في نهاية هذه السلسلة، نذكر مقطع من مكتبة لغة Arduino C والمبنية على لغة C أساساً. سنجد استخداماً مكثفاً للـ C preprocessor :

المراجع وروابط خارجية:

http://www.mybitbox.com/2012/12/robust-c-code-part-3-wrapping-c/

http://www.mybitbox.com/2012/12/robust-c-code-part-2-advanced-c-preprecessor/

http://www.mybitbox.com/2012/11/robust-c-code-part-1-c-preprocessor/

http://www.cprogramming.com/tutorial/cpreprocessor.html

http://www2.hh.se/staff/vero/embeddedProgramming/lectures/printL2.pdf

http://www.phaedsys.com/principals/bytecraft/bytecraftdata/bcfirststeps.pdf

http://en.wikipedia.org/wiki/C_preprocessor