دوره های آموزشی آکادمی پی وی لرن (پروژه محور و ویژه بازار کار)



  • ۲۵
  • اسفند

جلسه ۲۲ : پیش پردازنده در C

  • دسته‌بندی‌ها :
جلسه ۲۲ : پیش پردازنده در C
    • جزئیات
    • نوع محتواآموزشی

      مقدمه

      با سلام خدمت تمامی دوستان عزیز سایت پی وی لرن .و کاربرانی که دوره کامل آموزش زبان C را دنبال می کنند. و کاربرانی که با سری آموزش های زبان C همراهمون هستند. به توابع I / O در C و کار با فایل ها در C رو جلسه قبل پرداختیم. در این جلسه قصدداریم پیش پردازنده در زبان C و ماکروهای از پیش تعریف شده در C و عملگرهای پیش پردازنده  و چند مثال رو مورد بحث قرار می دهیم. امیدوارم نهایت استفاده رو ببرید.

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

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

      ردیفدستورالعمل و توضیحات
      ۱define#

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

      ۲include#

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

      ۳undef#

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

      ۴ifdef#

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

      ۵ifndef#

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

      ۶if#

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

      ۷else#

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

      ۸elif#

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

      ۹endif#

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

      error#

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

      pragma#

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

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

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

      مثال : 

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

        define# را برای ثابت ها استفاده کنید تا خوانایی افزایش یابد.

      مثال : 

      این دستورات CPP برای دریافت stdio.h از System Libraries و اضافه کردن متن به فایل منبع جاری را توضیح می دهد .خط بعدی دستور CPP برای دریافت myheader.h از دایرکتوری محلی و اضافه کردن مقدار به فایل منبع جاری را توضیح می دهد.
      مثال : 

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

      اگر MESSAGE قبلا تعریف نشده باشد. MESSAGE توسط CPP تعریف می شود.

      مثال : 

      اگر DEBUG تعریف شده باشد، دستورات ضمیمه شده را CPP پردازش می کند. هنگامی که شما پرچم DDEBUG را به کامپایلر gcc در زمان کامپایل انتقال دهید این مفید است. این DEBUG را تعریف می کند، بنابراین شما می توانید در زمان تدوین، اشکال زدایی را فعال یا غیرفعال کنید.

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

      ANSI C چندین ماکرو را تعریف می کند. اگر چه هر یک برای استفاده در برنامه نویسی در دسترس است، ماکروهای از پیش تعریف شده در C نباید مستقیما اصلاح شود .
      جدول زیر ماکروهای از پیش تعریف شده در C را نشان می دهد:
      ردیفماکرو و توضیحات
      ۱__DATE__

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

      ۲__TIME__

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

      ۳__FILE__

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

      ۴__LINE__

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

      ۵__STDC__

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

      بیایید مثال زیر را امتحان کنیم .

      مثال : 

      هنگامی که کد بالا در فایل test.c کامپایل شده و اجرا می شود، نتیجه ی زیر را تولید می کند:

      مثال : 

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

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

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

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

      مثال : 

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

      عملگر stringize یا number-sign، هنگامی که در تعریف ماکرو استفاده می شود، یک پارامتر ماکرو را به یک  رشته ثابت تبدیل می کند. این عملگر ممکن است فقط در یک ماکرویی که  آرگومان ثابتی یا لیست پارامتر دارد استفاده شود. به عنوان مثال :

      مثال : 

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

      مثال : 

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

      عملگر(##) token-pasting  در یک تعریف، ترکیبی از دو آرگومان است. این عملگر دو token جدا را به یک token واحد تبدیل می کند. به مثال زیر دقت کنید:

      مثال : 

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

      مثال : 

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

      مثال : 

      این مثال نشان می دهد تلفیق token##n به token34 و در اینجا از هر دو stringize و token-paste استفاده کرده ایم.

      عملگر Defined()

      عملگر پیش پردازنده defined در عبارات ثابت برای تعیین اینکه آیا یک شناسه با استفاده از #define تعریف شده است یا نه استفاده می شود.

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

      مثال : 

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

      مثال : 

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

      یکی از قابلیت های قدرتمند CPP توانایی شبیه سازی توابع با استفاده از ماکروهای parameterized است. به عنوان مثال، ما ممکن است برخی از کد را به مربع یک عدد به صورت زیر داشته باشیم .

      به مثال توجه کنید:

      مثال : 

      ما می توانیم کد بالا را با استفاده از یک ماکرو به صورت زیر بازنویسی کنیم .

      مثال : 

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

      مثال : 

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

      مثال : 

      کلام پایانی

      این جلسه پیش پردازنده در زبان C رو داشتیم ،در ادامه ماکروهای از پیش تعریف شده در C و انواع عملگرها ی پیش پردازنده و چند مثال رو با هم بررسی کردیم. در جلسه بعد فایل های header در زبان C رو مشاهده خواهیم کرد. همراهمون باشید .

      QR:  جلسه ۲۲ : پیش پردازنده در C
      به اشتراک بگذارید