شروط التضمين
هذه التوجيهات يمكنك من خلالها ترجمة جزء معين من ملف المصدر (الكود البرمجي),وبذلك أنت يمكنك التحكم بأي جزء تريد باستخام هذه التوجيهات if#, #else, #elif, #ifdef, #ifndef ,#endif
محتويات |
[تعديل] التركيب
#if expression | |||||||||
#elif expression | |||||||||
#ifdef expression | |||||||||
#ifndef expression | |||||||||
#else expression | |||||||||
#endif expression | |||||||||
[تعديل] الشرح
معالجة التوجيهات الشرطية تبدأ ب ifdef# أو التوجيهة ifndef# أو يمكن استخدام if# ; ثم بعد ذلك يتم استخدام elif# بشكل اختياري , كما يمكن استخدام elif# على الأقل مرة واحدة بشكل اختياري أيضا , عندالانتهاء يتم استخدام التوجيهة endif# .
أي توجيهات شرطية داخلية تتم معالجتها منفردة.
كل من التوجيهات التالية if# و ifdef# و ifndef# و elif# و else# تستمر بالتحكم حتى تجد واحدة من التوجيهات التالية endif# أو else# أو elif#.
كل من ifndef# و if# و ifnde# , تقوم باختبار القيمة المعطاة أهي معرفة أم لا فاذا كانت القيمة معرفة فان المترجم سيدخل الى كتلة الكود ويبدء المعالجة وفي هذه الحالة سيتم تجاهل التوجيهات التالية else# و elif# اذا كانت موجودة (لايتم تجاهل التوجيهات الموجودة داخل العمليات الداخلية بل يتم تجاهل التوجيهات التي في نفس المستوى -انظر الى المثال رقم2-). أما اذا كانت القيمة غير معرفة فانه سيتم تخطي كتلة الكود الحالية وسيتم معالجة كتلة الكود الموجود داخل التوجيهات else# و elif# , اذا كانت موجودة .
[تعديل] مثال 1
#define ABCD 2 #include <iostream> int main() { #ifdef ABCD std::cout << "1: yes\n"; #else std::cout << "1: no\n"; #endif #ifndef ABCD std::cout << "2: no1\n"; #elif ABCD == 2 std::cout << "2: yes\n"; #else std::cout << "2: no2\n"; #endif #if !defined(DCBA) && (ABCD < 2*4-3) std::cout << "3: yes\n"; #endif }
[تعديل] النتائج
1: yes 2: yes 3: yes
[تعديل] مثال 2
#include <iostream> #define ILOVECPP int main() { #ifdef ILOVECPP /*1*/ #ifdef too /*2*/ std::cout << "I love you too !" << std::endl << std::endl ; #else /*2*/ std::cout << "I love you little !" << std::endl << std::endl ; #endif/*2*/ #else /*1*/ std::cout << "But i still love you!" << std::endl << std::endl ; #endif /*1*/ }
[تعديل] النتائج
I love you little !
[تعديل] الشرح
التوجيهات من نفس الأرقام هي من نفس مستوى كتلة الكود .
1 : التوجيهات من المستوى الأول : في هذا المستوى سيتم تجاهل else# رقم واحد لأن القيمة معرفة ( ILOVECPP ) . ولن يتم تجاهل else# الأخرى (التي تحمل الرقم2 )لأنها ليست من نفس المستوى .
2 : التوجيهات من المستوى الثاني : في هذا المستوى سيتم تفقد القيمة اذا كانت معرفة أم لا (وهي ليست معرفة ) أي أنه سيتم الدخول الى التوجيه else# رقم 2 ومعالجة كتلة الكود .
بالنسبة للتوجيهة endif# فلكل مستوى توجيهة تقوم بانهائه.