آموزش سی شارپ - دستورالعملهای پیشپردازنده
دستورالعملهای پیشپردازنده دستوراتی هستند که به کامپایلر دستور میدهند که قبل از شروع کامپایلهای واقعی، اطلاعات را پیشپردازش کند.
همهٔ دستورالعملهای پیشپردازنده با # شروع میشوند و فقط کاراکترهای فاصلهٔ سفید میتوانند قبل از یک دستور پیشپردازنده در یک خط ظاهر شوند. دستورالعملهای پیشپردازنده دستورات نیستند، بنابراین با نقطهویرگول (;) ختم نمیشوند.
کامپایلر C# پیشپردازندهٔ جداگانهای ندارد؛ با این حال، دستورالعملها به طوری پردازش میشوند که وجود یک پیشپردازنده فرضی وجود دارد. در C#، دستورالعملهای پیشپردازنده برای کمک به کامپایل شرطی استفاده میشوند. به عکس دستورالعملها در C و C++ که برای ایجاد ماکروها استفاده میشوند، دستورالعملهای پیشپردازنده در C# استفاده نمیشوند. یک دستورالعملهای پیشپردازنده باید تنها دستور روی یک خط باشد.
دستورالعملهای پیشپردازنده در C#
جدول زیر دستورالعملهای پیشپردازنده موجود در C# را نشان میدهد −
ردیف | دستورالعمل پیشپردازنده و توضیحات |
---|---|
1 |
#define این دستور یک دنبالهای از کاراکترها، که سمبل نامیده میشود، تعریف میکند. |
2 |
#undef با استفاده از این دستور میتوانید یک سمبل را ناتعریف کنید. |
3 |
#if این دستور امکان بررسی یک سمبل یا سمبلها را برای دیدن اینکه آیا آنها به صورت true ارزیابی میشوند یا خیر، فراهم میکند. |
4 |
#else این دستور امکان ایجاد یک دستور پیشپردازندهٔ شرطی ترکیبی را در کنار #if فراهم میکند. |
5 |
#elif این دستور امکان ایجاد یک دستور پیشپردازندهٔ شرطی ترکیبی را فراهم میکند. |
6 |
#endif این دستور نهایی یک دستور پیشپردازندهٔ شرطی را مشخص میکند. |
7 |
#line این دستور به شما اجازه میدهد شمارهٔ خط کامپایلر و (اختیاری) نام فایل خروجی را برای خطاها و هشدارها تغییر دهید. |
8 |
#error این دستور امکان ایجاد یک خطا از یک موقعیت خاص در کد شما را فراهم میکند. |
9 |
#warning این دستور امکان ایجاد یک هشدار سطح یک از یک موقعیت خاص در کد شما را فراهم میکند. |
10 |
#region این دستور به شما اجازه میدهد یک بلوک کد را تعیین کنید که در هنگام استفاده از ویژگی متن ویرایشگر کد Visual Studio قابل گسترش یا جمعبندی است. |
11 |
#endregion این دستور پایان یک بلوک #region را مشخص میکند. |
پیشپردازندهٔ #define
دستورالعمل پیشپردازندهٔ #define ثابتهای نمادین را ایجاد میکند.
با استفاده از #define میتوانید یک سمبل را به گونهای تعریف کنید که با استفاده از سمبل به عنوان عبارت ارسال شده به دستور #if، عبارت به true ارزیابی میشود. نحو آن به شرح زیر است −
#define symbol
برنامه زیر این را نشان می دهد -
#define PI
using System;
namespace PreprocessorDAppl {
class Program {
static void Main(string[] args) {
#if (PI)
Console.WriteLine("PI is defined");
#else
Console.WriteLine("PI is not defined");
#endif
Console.ReadKey();
}
}
}
هنگامی که کد بالا کامپایل و اجرا می شود، نتیجه زیر را ایجاد می کند -
PI is defined
دستورالعملهای شرطی
میتوانید از دستورالعمل #if برای ایجاد یک دستورالعمل شرطی استفاده کنید. دستورالعملهای شرطی برای بررسی یک سمبل یا سمبلها و بررسی اینکه آیا آنها به صورت true ارزیابی میشوند، مفید هستند. اگر آنها به صورت true ارزیابی شوند، کامپایلر همهٔ کد بین #if و دستورالعمل بعدی را ارزیابی میکند.
نحو دستورالعمل شرطی به شرح زیر است −
#if symbol [operator symbol]...
که در آن، symbol نام سمبلی است که میخواهید آن را بررسی کنید. همچنین میتوانید از true و false استفاده کنید یا سمبل را با عملگر منفی پیشنیاز کنید.
operator symbol عملگری است که برای ارزیابی سمبل استفاده میشود. عملگرها ممکن است شامل یکی از موارد زیر باشند −
- == (برابری)
- != (نابرابری)
- && (و)
- || (یا)
همچنین میتوانید سمبلها و عملگرها را با استفاده از پرانتزها گروهبندی کنید. دستورالعملهای شرطی برای کامپایل کد در یک نسخهٔ اشکالزدایی یا هنگام کامپایل کردن برای یک پیکربندی خاص استفاده میشوند. یک دستورالعمل شرطی که با یک دستورالعمل #if شروع شده است، باید به صورت صریح با یک دستورالعمل #endif خاتمه یابد.
برنامهٔ زیر استفاده از دستورالعملهای شرطی را نشان میدهد −
#define DEBUG
#define VC_V10
using System;
public class TestClass {
public static void Main() {
#if (DEBUG && !VC_V10)
Console.WriteLine("DEBUG is defined");
#elif (!DEBUG && VC_V10)
Console.WriteLine("VC_V10 is defined");
#elif (DEBUG && VC_V10)
Console.WriteLine("DEBUG and VC_V10 are defined");
#else
Console.WriteLine("DEBUG and VC_V10 are not defined");
#endif
Console.ReadKey();
}
}
هنگامی که کد بالا کامپایل و اجرا می شود، نتیجه زیر را ایجاد می کند -
DEBUG and VC_V10 are defined