預(yù)處理器指令用來在編譯開始之前給編譯器指示預(yù)處理信息。
所有預(yù)處理程序指令以符號#開頭,并且只有空格字符在一行上,空格符可預(yù)處理器指令之前出現(xiàn)。 預(yù)處理器指令不是語句,所以它們不以分號(;)結(jié)尾。
C# 編譯器沒有分隔預(yù)處理器;,指令被處理為只有一個。 在 C# 中,預(yù)處理指令用于指示條件編譯。與C語言和C++指令不同,它們不用于創(chuàng)建宏。 預(yù)處理程序指令必須是一行中的唯一指令。
下表列出了 C# 中提供的預(yù)處理指令:
| 預(yù)處理指令 | 描述 |
|---|---|
#define |
定義一個叫作符號的字符序列。 |
#undef |
用于取消定義的符號。 |
#if |
用來測試符號以查看它們是否為真。 |
#else |
用來與#if來創(chuàng)建一個復(fù)合條件指令。 |
#elif |
用來創(chuàng)建一個復(fù)合條件指令。 |
#endif |
指定條件指令的結(jié)束。 |
#line |
用于修改編譯器的行號和(可選)修改錯誤和警告的文件名輸出。 |
#error |
用于從代碼中的特定位置生成錯誤。 |
#warning |
用于從代碼中的特定位置生成一級警告。 |
#region |
允許您在使用Visual Studio代碼編輯器的概述功能時指定可以展開或折疊的代碼塊。 |
#endregion |
用于標志著#region塊的結(jié)束。 |
#define預(yù)處理程序指令創(chuàng)建符號常量。#define允許定義一個符號,通過使用該符號作為傳遞給#if指令的表達式,表達式的計算結(jié)果為true。其語法如下:
#define symbol
以下程序演示如何使用#define指令:
#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();
}
}
}
當編譯和執(zhí)行上述代碼時,會產(chǎn)生以下結(jié)果:
PI is defined
可以使用#if指令創(chuàng)建條件指令。條件指令用于測試符號檢查它們的值是否為真。 如果它們評估求值為true,編譯器將評估求值#if到下一個指令之間的所有代碼。
條件指令的語法是:
#if symbol [operator symbol]...
其中,符號(symbol)是要測試的符號的名稱。也可以使用布爾值:true和false,或者使用否定運算符加到符號的前面。
運算符符號是用于評估符號的運算符。運算符可以是以下任一項:
==(相等)!=(不等式)&&(和)|| (或)也可以使用括號對符號和運算符進行分組。在用于編譯調(diào)試版本的代碼或編譯特定配置時可使用條件指令。 以#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();
}
}
當編譯和執(zhí)行上述代碼時,會產(chǎn)生以下結(jié)果:
DEBUG and VC_V10 are defined