سی شارپ - دستورالعمل پیش پردازنده

دستورات preprocessor توابعی را به کامپایلر می دهد تا اطلاعات را قبل از اینکه اجرای واقعی شروع شود، پیش پردازش کند.

تمام دستورات preprocessor با # شروع می شوند و فقط کاراکترهای فضای خالی ممکن است قبل از یک دستور preprocessor روی یک خط ظاهر شوند. دستورات preprocessor دستورات اجرایی نیستند پس با سمیکالن (;) به پایان نمی رسند.

کامپایلرهای سی شارپ دارای preprocessor های مجزل نیستند، اگرچه دستورات طوری پردازش می شوند که انگار یک دستور هستند. در سی شارپ دستورات preprocessor برای کمک به conditional compilation استفاده می شوند. برخلاف دستورات C و C++، این دستور برای ایجاد ماکروها استفاده نمی شوند. یک preprocessor باید تنها دستور روی یک خط باشد.

دستورات preprocessor در سی شارپ

جدول زیر دستورات موجود درسی شارپ را نشان می دهد

Preprocessor Directive Description.
#define It defines a sequence of characters, called symbol.
#undef It allows you to undefine a symbol.
#if It allows testing a symbol or symbols to see if they evaluate to true.
#else It allows to create a compound conditional directive, along with #if.
#elif It allows creating a compound conditional directive.
#endif Specifies the end of a conditional directive.
#line It lets you modify the compiler's line number and (optionally) the file name output for errors and warnings.
#error It allows generating an error from a specific location in your code.
#warning It allows generating a level one warning from a specific location in your code.
#region It lets you specify a block of code that you can expand or collapse when using the outlining feature of the Visual Studio Code Editor.
#endregion It marks the end of a #region block.

پیش پردازنده ی #define

به شما اجازه می دهد ثابت های symbolic ایجاد کنید.

#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

هدايتگر ها یا Directive ی شرطی

می توانید از دستور #if برای ایجاد هدايتگرهای شرطی استفاده کنید. هدايتگرهای شرطی برای بررسی اینکه آیا یک یا چند نماد برابر با true هستند، مفید می باشند. اگر برابر با true باشند، کامپایلر تمام کد بین. #if و directiveبعدی را اجرا میکند.

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

#if symbol [operator symbol]...

در دستور بالاsymbol نام symbol ی است که می خواهید تست کنید.همچنین می توانید از true و false استفاده کنید و یاعملگر نفی را به ابتدای نماد اضافه کنید

عملگر symbol، عملگری است که برای ارزیابی کردن symbol استفاده می شود. که میتواند هر کدام از عملگر های زیر باشد:

  • == (equality)
  • != (inequality)
  • && (and)
  • || (or)

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