預(yù)處理指令是一種給編譯器的指令,用來(lái)在實(shí)際的編譯開(kāi)始之前預(yù)處理一些信息。
所有的預(yù)處理指令都以 # 開(kāi)始,并且在一行預(yù)處理指令中,只有空白字符可以出現(xiàn)在指令之前。預(yù)處理指令沒(méi)有聲明,所以他們不需要以分號(hào)(;)結(jié)尾。
C# 編譯器不具有獨(dú)立的預(yù)處理機(jī)制;然而,指令執(zhí)行的時(shí)候就像是只有這一條一樣。在 C# 中,預(yù)處理指令被用來(lái)幫助條件編譯。不像 C 或 C++ 的指令,他們不能創(chuàng)建宏。一個(gè)預(yù)處理指令必須是這一行代碼中的唯一的指令。
下面的表格中列出了 C# 中可用的預(yù)處理指令:
預(yù)處理指令 | 描述 |
---|---|
#define | 定義了一串字符,稱為符號(hào)。 |
#undef | 可以取消定義的符號(hào)。 |
#if | 測(cè)試一個(gè)或多個(gè)表達(dá)式的結(jié)果是否為真。 |
#else | 用于創(chuàng)建復(fù)合條件指令,和 #if 一起使用。 |
#elif | 用于創(chuàng)建復(fù)合條件指令。 |
#endif | 指出條件指令的結(jié)尾。 |
#line | 可以修改編譯器的行號(hào),選擇性修改輸出錯(cuò)誤和警告的文件名 |
#error | 從代碼的特定位置生成誤差 |
#warning | 從代碼的特定位置生成一級(jí)預(yù)警 |
#region | 當(dāng)你使用 Visual Studio 代碼編譯器時(shí),你可以展開(kāi)或折疊一部分代碼塊 |
#engregion | 它標(biāo)志著 #region 塊的結(jié)束 |
#define
預(yù)處理指令是用來(lái)創(chuàng)建符號(hào)常量的。
應(yīng)用 #define 可以定義一個(gè)符號(hào),這個(gè)符號(hào)會(huì)作為一個(gè)表達(dá)式傳遞給 #if 指令,這個(gè)判斷會(huì)得到 ture 的 結(jié)果。語(yǔ)法如下:
#define symbol
下面的程序說(shuō)明了這一點(diǎn):
#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í)行上述代碼,得到如下結(jié)果:
PI is defined
你可以使用 #if 指令創(chuàng)建一個(gè)條件指令。條件指令可以用來(lái)判斷一個(gè)或多個(gè)符號(hào)是否為真。如果他們的結(jié)果為真,編譯器就會(huì)執(zhí)行 #if 和下一條指令間的所有代碼。
條件指令的語(yǔ)法如下:
#if symbol [operator symbol]...
當(dāng)你想測(cè)試的符號(hào)是 “symbol”這個(gè)名字的時(shí)候。你也可以使用 ture 和 false 或者提前使用反運(yùn)算符操作這個(gè)符號(hào)。
operator symbol(運(yùn)算符符號(hào))是一種用于符號(hào)求值的運(yùn)算符。運(yùn)算符可以是下列之一:
你也可以通過(guò)括號(hào)使用組符號(hào)和組運(yùn)算符。條件指令用于編譯代碼生成 debug 或者是編譯特定配置時(shí)。一個(gè)條件指令以 #if 開(kāi)頭并且必須明確的以 #endif 指令結(jié)束。
下面的程序示范了條件指令的使用方法:
#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í)行上述代碼,得到如下結(jié)果:
DEBUG and VC_V10 are defined