شروط التضمين
هذه التوجيهات يمكنك من خلالها ترجمة جزء معين من ملف المصدر (الكود البرمجي),وبذلك أنت يمكنك التحكم بأي جزء تريد باستخام هذه التوجيهات if#
, #else
, #elif
, #ifdef
, #ifndef
,#endif
محتويات |
[تعديل] التركيب
#ifexpression | |||||||||
#elifexpression | |||||||||
#ifdefexpression | |||||||||
#ifndefexpression | |||||||||
#elseexpression | |||||||||
#endifexpression | |||||||||
[تعديل] الشرح
معالجة التوجيهات الشرطية تبدأ ب 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#
فلكل مستوى توجيهة تقوم بانهائه.