預處理器指令的開頭都有符號#。
注意:
C#中並沒有一個像C++那樣的獨立預處理器,所謂的預處理器指令仍由編譯器處理。
下面將對這些指令逐一介紹。
1. #define和#undef
#define可以定義符號。當將符號用作傳遞給#if指令的表達式時,此表達式的計算結果true。如
#define DEBUG
它告訴編譯器存在給定名稱的符號,在本例中是DEBUG。這個符號不是實際代碼的一部分,只在編譯代碼時存在。
#undef正好相反,它刪除一個符號。
必須把#define和#undef命令放在C#源碼的開頭,即在要編譯的任何代碼之前。它不像C++中那樣可以定義常數值。
#define本身並無大用,它需要配合#if指令使用。
如
#define DEBUG
int DOSw(double x)
{
#if DEBUG
COnsole.WriteLine("x is"+X);
#edif
}
2. #if, #elif, #else和#endif
這些指令告訴編譯器是否要編譯某個代碼塊。看下面的方法:
static void PrintVersion()
{
#if V3
Console.WriteLine("Version 3.0");
#elif V2
Console.WriteLine("Version 2.0");
#else
Console.WriteLine("Version 1.0");
#endif
}
上面的代碼會根據定義的符號來打印不同的版本信息。 這種方式成為條件編譯。
注意:
使用#if不是條件編譯代碼的唯一方式,C#還提供了通過Conditional屬性的機制。
#if和#elif還支持一組邏輯運算符!=,==,!=和|| 。如果符號存在,符號的值被認為是true,否則為false,如:
#if V3 || (V2 == true) // if 定義了V3或V2符號...