شروط التضمين

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

أدوات شخصية
المتغيرات
النطاقات
أفعال
إبحار
صندوق الأدوات
بلغات أخرى