المتغيرات
فضاءات التسمية
أفعال

شروط التضمين

من cppreference.com


هذه التوجيهات يمكنك من خلالها ترجمة جزء معين من ملف المصدر (الكود البرمجي),وبذلك أنت يمكنك التحكم بأي جزء تريد باستخام هذه التوجيهات ‎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#‎ فلكل مستوى توجيهة تقوم بانهائه.

close