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