آموزش C

مباحث پایه زبان C

پیش پردازنده در زبان C – آموزش زبان C

تصویر c-preprocessors_4159 پیش پردازنده در زبان C - آموزش زبان C

پیش پردازنده در زبان C

پیش پردازنده جزء کامپایلر زبان C نیست بلکه یک مرحله جداگانه در فرآیند کامپایل برنامه است. به عبارت دیگر پیش پردازنده فقط یک ابزار جایگزینی متن است و این عمل را قبل از کامپایل شدن برنامه انجام می دهد. CPP نامی است که به اختصار به آن می گویند و مخفف C Preprocessor می باشد. تمام دستورات پیش پردازنده در زبان برنامه نویسی C با نماد # آغاز می شوند. در جدول زیر دستورات پیش پردازنده مهم در زبان C را مشاهده می کنید:

ردیفتوضیحات
1#define

یک ماکرو پیش پردازنده را جایگزین می کند.

2#include

یک فایل هدر را به برنامه اضافه می کند.

3#undef

ماکرو تعریف شده توسط دستور #define را حذف می کند.

4#ifdef

اگر این ماکرو تعریف شده باشد، true باز می گرداند.

5#ifndef

اگر این ماکرو تعریف نشده باشد، true باز می گرداند.

6#if

دستور شرطی زمان کامپایل است.

7#else

جایگزینی برای #if در صورتی که شرط بررسی شده درست نباشد.

8#elif

#if و #else در یک دستور.

9#endif

بخش شرطی پیش پردازنده را خاتمه می دهد.

10#error

پیام خطا را در stderr تنظیم می کند.

11#pragma

با استفاده از یک روش استاندارد، دستورالعمل های خاصی را برای کامپایلر انجام می دهد.

مثال های پیش پردازنده

برای درک بهتر موضوع پیش پردازنده، مثال های زیر را بررسی کنید.

دستور فوق برای جایگزینی MAX_ARRAY_LENGTH با مقدار 20 استفاده می شود. یعنی هر کجایی برنامه از MAX_ARRAY_LENGTH استفاده کنید، هنگام کامپایل با 20 جایگزین می شود.

دستور فوق یعنی #include فایل های header مختلف را به برنامه اضافه می کند. خط اول برای اضافه کردن فایل های سیستمی است و خط دوم هم فایل هایی که توسط برنامه نویس نوشته شده است را اضافه می کند.

دستور فوق FILE_SIZE تعریف شده را حذف می کند و سپس آن را با مقدار جدید یعنی 42 تنظیم می کند.

دستور فوق بررسی می کند که آیا MESSAGE تعریف شده است یا خیر. در صورتی که تعریف نشده باشد، آن را تعریف می کند.

اگر DEBUG تعریف شده باشد، دستورات موجود در بلوک #ifdef و #endif اجرا می شوند.

ماکروهای از پیش تعریف شده

جدول زیر ماکروهای از پیش تعریف شده در زبان برنامه نویسی C را نشان می دهد:

ردیفتوضیحات
1__DATE__

تاریخ جاری در فرمت “MMM DD YYYY” را در خود ذخیره می کند.

2__TIME__

زمان جاری در فرمت “HH: MM: SS” را در خود ذخیره می کند.

3__FILE__

نام فایل جاری را به صورت رشته در خود ذخیره می کند.

4__LINE__

شماره خط جاری را به صورت یک عدد دسیمال در خود ذخیره می کند.

5__STDC__

اگر عمل کامپایل بر اساس استاندارد ANSI صورت گیرد، مقدر یک را در خود ذخیره می کند.

برای مشاهده عملکر ماکروهای فوق مثال زیر را امتحان کنید:

امتحان کنید

زمانی که کد بالا کامپایل و اجرا شود، نتیجه زیر را تولید خواهد کرد:

عملگرهای پیش پردازنده

زبان C برای ایجاد ماکروهایی با قابلیت بیشتر، عملگرهای زیر را ارائه می کند.

عملگر ادامه ماکرو (\)

یک ماکرو معمولا در یک خط نوشته می شود، اما ممکن است گاهی اوقات  ماکرو ما طولانی شود. در این مواقع می توان از عملگر (\) استفاده کرد. مانند نمونه زیر:

عملگر رشته سازی (#)

از این عملگر برای تبدیل پارامتر یک ماکرو به یک رشته استفاده می شود. مثال زیر به خوبی نحوه عملکر این عملگر را نشان می دهد:

امتحان کنید

زمانی که کد بالا کامپایل و اجرا شود، نتیجه زیر را تولید خواهد کرد:

عملگر چسباندن token (##)

این عملگر دو token جدا را به یک token واحد تبدیل می کند. به مثال زیر توجه کنید:

امتحان کنید

زمانی که کد بالا کامپایل و اجرا شود، نتیجه زیر را تولید خواهد کرد:

خروجی واقعی پیش پردازنده به صورت زیر است:

عملگر Defined()

عملگر defined در یک عبارت ثابت بررسی می کند که یک شناسه با استفاده از دستور #define تعریف شده است یا نه. اگر تعریف شده باشد، مقدار غیر صفر (true) باز میگرداند و اگر تعریف نشده باشد، مقدار صفر (false) باز میگرداند. مثال زیر نحوه استفاده از این عملگر را نشان می دهد:

امتحان کنید

زمانی که کد بالا کامپایل و اجرا شود، نتیجه زیر را تولید خواهد کرد:

ماکروهای پارامتریک

یکی از ویژگی های قدرتمند پیش پردازنده، امکان شبیه سازی توابع با استفاده از ماکروهای پارامتریک می باشد. برای نمونه مثال زیر را در نظر بگیرید:

کد بالا را می توان به این صورت هم نوشت:

ماکروهای پارامتریک باید قبل از استفاده شدن، توسط دستور #define تعریف شوند. لیست پارامترها بین پرانتز باز و بسته قرار می گیرد و نباید بین نام ماکرو و پرانتزها فاصله باشد. مثلا:

امتحان کنید

زمانی که کد بالا کامپایل و اجرا شود، نتیجه زیر را تولید خواهد کرد:

ثبت نظر
ریفریش کنید!
نظرات کاربران (۰ مورد)

هیچ نظری ثبت نشده است