دستورات پیش پردازنده شرطی
در حالت معمولی ، دستور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 را تست می کند که چون این کرو تعریف نشده است موجب خروجی زیر می شود :
دیدگاه خود را بیان کنید.
باید وارد سایت شده باشید برای دیدگاه دادن