Dyrektywy preprocesora dają instrukcje dla kompilatora, aby przetworzył informacje zanim dojdzie do rzeczywistego procesu kompilacji.
Wszystkie dyrektywy rozpoczynają się od znaku # i jedynie znaki spacji mogą pojawić się w linii deklaracji
dyrektywy. Dyrektywy nie są traktowane jak deklaracje, dlatego taka linia nie musi kończyć się znakiem średnika.
Kompilator języka C# nie ma odrębnego preprocesora, jednakże dyrektywy przetwarzane są w taki sposób jak by taki preprocesor istniał. W C#
używane są do warunkowej kompilacji. Dyrektywa preprocesora musi być jedyną instrukcją w linii.
Dyrektywy preprocesora
Poniżej lista dyrektyw dostępnych w języku C#:
Dyrektywa
Znaczenie
#define
definiuje ciąg znaków, tj. symbol
#undef
pozwala na oddefiniowanie symbolu
#if
pozwala na testowanie symbolu lub sprawdzenie czy jest to wartość logiczna prawdziwa lub fałszywa
#else
pozwala na utworzenie związku wraz z dyrektywą #if
#elif
pozwala na tworzenie bardziej złożonych testów symbolu
#endif
określa koniec warunkowej dyrektywy
#line
pozwala na zmianę numeru linii kompilatora oraz opcjonalnie na zmianę nazwy pliku wyjściowego z błędami i ostrzeżeniami
#error
pozwala na wygenerowanie błędu w określonej lokalizacji w kodzie
#warning
pozwala na wygenerowanie ostrzeżenia w określonej lokalizacji w kodzie
#region
pozwala na zdefinowanie bloku kodu, który można zwinąć/rozwinąć w trakcie korzystania z Visual Studio
#endregion
onaczna koniec bloku rozpoczętego dyrektywą #region
Dyrektywa #define
Dyrektywa ta definiuje ciąg znaków.
#define pozwala na utworzenie symbolu, który może zostać przekazany do dyrektywy #if.
Symbol taki ma wartość true a jego definicja to:
#define symbol
Przykład:
#define MOJAZMIENNA
using System;
namespace Dyrektywy
{
class Program
{
static void Main(string[] args)
{
#if(MOJAZMIENNA)
Console.WriteLine("Zmienna jest zdefiniowana");
#else
Console.WriteLine("Zmienna nie jest zdefiniowana");
#endif
Console.ReadKey();
}
}
}
Dyrektywy warunkowe
Dyrektywa #if może zostać użyta do utworzenia dyrektyw warunkowych. Są one przydatne to testowania symboli oraz
sprawdzania czy wartość logiczna takiego symbolu jest prawdziwa. Jeżeli wartość logiczna jest prawdziwa zostanie wykonany cały kod pomiędzy
#if a następną dyrektywą.
Składnia:
#if (warunek)
Warunki, które mogą być sprawdzane w dyrektywie warunkowej:
== (równość);
!= (nierówność);
&& (i);
|| (lub).
Przykład użycia:
#define DEBUG
#define VERSION1
using System;
namespace Dyrektywy
{
class Program
{
static void Main(string[] args)
{
#if (DEBUG && !VERSION1)
Console.WriteLine("DEBUG jest zdefiniowane);
#elif (!DEBUG && VERSION1)
Console.WriteLine("VERSION1 jest zdefiniowane);
#elif (DEBUG && VERSION1)
Console.WriteLine("DEBUG oraz VERSION1 są zdefiniowane");
#else
Console.WriteLine("DEBUG oraz VERSION1 nie są zdefiniowane");
#endif
Console.ReadKey();
// Wynik działania programu
//DEBUG oraz VERSION1 sa zdefiniowane
}
}
}