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

شروط التضمين

من cppreference.com


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