( تعداد نمایش : 1835 )

دستورات پیش پردازنده شرطی – آموزش سی قسمت سی و هشتم

دستورات پیش پردازنده شرطی

در حالت معمولی ، دستورif برای تصمیم گیری در نقاط مختلف برنامه بکار میرود.
شرطهایی که در دستور if ذکر می شوند در حین اجرای برنامه ارزشیابی می شوند .
یعنی اگر شرط ذکر شده در دستور if چه درست باشد یا نادرست ، این دستور و کلیه
دستورات دیگر که در بلاک if قرار دارند ترجمه می شوند . ولی در دستورات پیش
پردازنده شرطی ، شرطی که در آن ذکر می شود در حین ترجمه ارزشیابی می شود .
دستورات پیش پردازنده شرطی عبارتند از : # if/ # else/ # endif/ # ifdef/ # ifnder

دستور #if بصورت زیر بکار می رود :
عبارت شرطی # if
مجموعه دستورات # endif

عبارت شرطی که در دستور # if ذکر می شود ، عبارتی است که مقدار آن در زمان
ترجمه معلوم است . این عبارت در حین ترجمه ارزیابی می شود . چنانچه دارای ارزش ”
درستی ” باشد مجموعه دستورات موجود در بین # if ( ابتدای بلاک ) و # endif
( انتهای بلاک ) ترجمه خواهد شد وگرنه این مجموعه دستورات ترجمه نمی گردد .

مثال ۱: #include “stdio.h”
#define max 100
main)(
{
#if max>90
printf(“compiled for array” );
printf(” qreater than 90\n”);
#endif
}

خروجی برنامه مثال ۱ : compiled for array greater than 90

وقتی برنامه مثال ۱ ترجمه میگردد شرط ۹۰>MAX تست میشود، چون این شرط برقرار
است ، دستور بعدی ترجمه شده و آماده اجرا می گردد که نتیجه اجرای آن را نیز
مشاهده نمودید .
نحوه عمل #else همانند else در دستور if است ( مثال ۲ ) .

مثال ۲: #include “stdio.h”
#define max 10
main)(
{
#if max>99
printf(“compiled for array…\n” );
#else
printf(“compiled for small array” );
#endif
}

خروجی برنامه مثال ۲ : compiled for small array

در برنامه مثال ۲ چون شرط ۹۹>MAX برقرار نیست ، لذا دستور بعد از آن ترجمه
نمیشود. اما دستور بعداز #else ترجمه شده و پس از اجرا نتیجه زیر حاصل میگردد: “Compiled for small array”
#elif
مشابه دستور else if رفتار می کند و بصورت زیر استفاده می شود :
عبارت شرطی ۱ # if
مجموعه دستورات ۱
عبارت شرطی # elif 2
مجموعه دستورات ۲
عبارت شرطی # elif 3
مجموعه دستورات ۳ .
.
.

عبارت شرطی # elif n
مجموعه دستورات n # endif

همانطور که ملاحظه می شود ، هر # elif به همراه یک عبارت شرطی است که اگر
نتیجه ارزیابی آن ارزش ” درستی ” داشته باشد مجموعه دستورات مربوط به آن ترجمه
شده و کنترل به دستور بعداز# endif برمی گردد، وگرنه شرطهای موجود در#elif های
بعدی مورد بررسی قرار می گیرند ، اگر هیچکدام از عبارات شرطی ذکر شده در این
ساختار دارای ارزش ” درستی ” نباشند ، هیچیک از مجموعه دستورات ۱تا nا ترجمه
نخواهد شد .

مثال ۳: #define US 0
#define ENGLAND 1
#define IRAN g
#define ACTIVE_COUNTRY US
main)(
{
#if ACTIVE_COUNTRY==US
char currency[]=”dolar”;
#elif ACTIVE_COUNTRY==ENGLAND
char curreney[]=”pound”;
#else
char curreney[]=”rials”;
#endif
printf(“\n currency is:”);
printf(“%s”/currency);
}

خروجی برنامه مثال ۳ : currency is:dolar

استفاده از #ifdefو #ifndefو روش دیگری برای پیاده سازی ترجمه شرطی دستورات
است ( #ifdef یعنی “if defined”و #ifndefو یعنی “if not defined” ) .
دستور #ifdef بصورت زیر بکار می رود :
نام ماکرو #ifdef
مجموعه دستورات #endif

اگر ماکرویی که نام آن در جلوی #ifndef ذکر شده است در یک دستور #define
تعریف شده باشد در این صورت مجموعه دستورات ذکر شده ، ترجمه خواهند شد وگرنه
این دستورات ترجمه نمی گردند .
دستور # ifndef که عکس دستور #ifedf عمل می کند بصورت زیر استفاده می شود :
نام ماکرو #ifndef
مجموعه دستورات #endif

اگر ماکرویی که نام آن در جلوی # ifndef ذکر شده است در یک دستور # define
تعریف نشده باشد مجموعه دستورات ذکر شده ، ترجمه می گردند وگرنه ترجمه نخواهند
شد .

مثال ۴: #include “stdio.h”
#define TEN 10
main)(
{
#ifdef TEN
printf(“\n TEN defined.”);
#else
printf(“\n TEN not defined.”);
#endif
#ifndef ALPHA
printf(“\n ALPHA is not defined.”);
#endif
}

در برنامه مثال ۴ دستور# ifedf تست می کند که آیا ماکروی TEN تعریف شده است
یا خیر . چون این ماکرو در این برنامه تعریف شده است ، دستور بعد از آن ترجمه
شده و پس از اجرای نتیجه زیر حاصل می شود : TEN defined

دستور #ifndef تعریف یا عدم تعریف ماکروی ALPHA را تست می کند که چون این کرو تعریف نشده است موجب خروجی زیر می شود :

دیدگاه خود را بیان کنید.

باید وارد سایت شده باشید برای دیدگاه دادن