خانه > #C, Persian Contents, Visual Studio > دستورالعمل‌های پیش‌پردازشی #C چیستند؟

دستورالعمل‌های پیش‌پردازشی #C چیستند؟

دستورالعمل‌های پیش‌پردازشی به ما این قابلیت را می‌دهند که به صورت شرطی عملیات کامپایل کردن را انجام دهیم یعنی قابلیت نادیده گرفتن شرطی بخشی از فایل‌های منبع، قرار دادن شرط برای تولید خطا و هشدار، و مشخص کردن بخشی مجزا از کد منبع را برای ما مهیا می‌کنند. واژه «دستورالعمل‌های پیش‌پردازشی» فقط برای همسانی با زبان‌های برنامه‌نویسی C  و ++C به کار برده شده‌اند. در #C هیچ مرحله مجزایی به عنوان مرحله قبل از پردازش وجود ندارد و این دستورالعمل‌ها در بخشی از فاز تحلیل لغوی (lexical analysis phase) زبان، پردازش می‌شوند.

 

در #C دستورالعمل‌های پیش‌پردازشی زیر موجود هستند:

۱- define# و undefine# : به ترتیب برای تعریف و حذف کردن علامت‌های قابل فهم برای کامپایل شرطی استفاده میذشوند.

۲- if# و elif# و else# و endif# : این‌ها عباراتی هستند که با استفاده از آن‌ها می‌توانیم به صورت شرطی به کامپایلر بفهمانیم که بخشی از کد منبع را در عملیات کامپایل کردن نادیده بگیرد.

۳-  line# : که برای کنترل کردن شماره خطوطی که برای خطاها و هشدارها منتشر شده‌اند.

۴- error# و warning# : به ترتبب برای صادر کردن خطاها و هشدارها استفاده می‌شوند.

۵- region# و endregion# : برای مشخص و مجزا کردن بخشی از کد منبع باشد.فکر میکنم از این دستورالعمل بیش از بقیه استفاده می‌شود.

 

به تکه کد زیر دقت کنید :

#define A
#undef B
class C
{
#if A
void F() {}
#else
void G() {}
#endif
#if B
void H() {}
#else
void I() {}
#endif
}

این تکه کد در زمان کامپایل معادل کد زیر کامپایل می‌شود :

class C
{
void F() {}
void I() {}
}

این دو اگرچه از لحاظ لغوی کاملا با هم متفاوتند ولی از دید قواعد نحوی کاملا معادل یکدیگر می‌باشند.

در اینجا برای فهم بهتر کامپایل شرطی مثالی می‌زنم تا موضوغ قابل فهم‌تر باشد. فرض کنید می‌خواهیم یکی از سرویس‌های نوشته شده توسط ما، در یکی از dll های برنامه‌مان به صورت شرطی دو رفتار مختلف نشان دهد. مثلا این سرویس باید برای دو شرکت خریدار محصول ما متفاوت باشد و برای هر کدام نیاز داریم یک dll مجزا تولید کنیم، در عین حال نمی‌خواهیم به ازای هر کدام یک متد جدا داشته باشیم، در اینجا می‌توانیم از دستورالعمل if# و else# و endif# استفاده کنیم و کامپایل شدن dll را به یک پارامتر وابسته نماییم. این پارامتر را هم می‌توان به کمک define# تعریف کرد و هم می‌توان از بخش properties مربوط به پروژه که به یک dll تبدیل خواهد شد این کار را انجام داد. برای روش دوم باید از صفحه ظاهر شده روی لبه‌ی Build کلیک کرد و در بخش Conditional compilation symbols آن را تعریف می‌کنیم، مثلا می‌توانیم از نام شرکت مورد نظر به عنوان این علامت استفاده کرد.

  1. اکتبر 7, 2010 در 1:30 ب.ظ.

    مثال جالب و قابل فهمی بود.ممنون

    • اکتبر 7, 2010 در 2:02 ب.ظ.

      سلام
      ممنونم، امیدوارم به کار دوستان بیاید.

  2. خفنوویچ
    اکتبر 8, 2010 در 3:21 ب.ظ.

    pragma رو فراموش کردی

  3. اکتبر 16, 2010 در 10:25 ق.ظ.

    سلام
    وبلاگ مفیدی دارید.من از مطالبتون استفاده کردم.
    خوشحال می شم نظرتون را در مورد وبلاگم که تازه راش انداختم بدونم.
    ممنون

  4. john
    نوامبر 13, 2010 در 11:40 ب.ظ.

    سلام
    با تشکر از وبلاگ خوبتان
    ولی یک سوال شما که از feedburner استفاده می کنید، چرا بخش email delivery را فعال نمی کنید که بتوان با استفاده از email به feed دسترسی داشت؟

    • نوامبر 14, 2010 در 12:01 ق.ظ.

      سلام دوست عزیز
      از لطف شما ممنونم. راستش خیلی با این قابلیت آشنا نیستم. اگر راهنمایی کنید ممنون میشم.

  1. No trackbacks yet.

پاسخی بگذارید

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

نشان‌وارهٔ وردپرس.کام

شما در حال بیان دیدگاه با حساب کاربری WordPress.com خود هستید. بیرون رفتن / تغییر دادن )

تصویر توییتر

شما در حال بیان دیدگاه با حساب کاربری Twitter خود هستید. بیرون رفتن / تغییر دادن )

عکس فیسبوک

شما در حال بیان دیدگاه با حساب کاربری Facebook خود هستید. بیرون رفتن / تغییر دادن )

عکس گوگل+

شما در حال بیان دیدگاه با حساب کاربری Google+ خود هستید. بیرون رفتن / تغییر دادن )

درحال اتصال به %s

%d وب‌نوشت‌نویس این را دوست دارند: