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

شروط التضمين

من 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# فلكل مستوى توجيهة تقوم بانهائه.