C# 預(yù)處理指令

2018-09-27 16:28 更新

預(yù)處理指令

預(yù)處理指令是一種給編譯器的指令,用來在實(shí)際的編譯開始之前預(yù)處理一些信息。

所有的預(yù)處理指令都以 # 開始,并且在一行預(yù)處理指令中,只有空白字符可以出現(xiàn)在指令之前。預(yù)處理指令沒有聲明,所以他們不需要以分號(hào)(;)結(jié)尾。

C# 編譯器不具有獨(dú)立的預(yù)處理機(jī)制;然而,指令執(zhí)行的時(shí)候就像是只有這一條一樣。在 C# 中,預(yù)處理指令被用來幫助條件編譯。不像 C 或 C++ 的指令,他們不能創(chuàng)建宏。一個(gè)預(yù)處理指令必須是這一行代碼中的唯一的指令。

C# 中的預(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í),你可以展開或折疊一部分代碼塊
#engregion它標(biāo)志著 #region 塊的結(jié)束

define 指令

#define預(yù)處理指令是用來創(chuàng)建符號(hào)常量的。

應(yīng)用 #define 可以定義一個(gè)符號(hào),這個(gè)符號(hào)會(huì)作為一個(gè)表達(dá)式傳遞給 #if 指令,這個(gè)判斷會(huì)得到 ture 的 結(jié)果。語法如下:

    #define symbol

下面的程序說明了這一點(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è)條件指令。條件指令可以用來判斷一個(gè)或多個(gè)符號(hào)是否為真。如果他們的結(jié)果為真,編譯器就會(huì)執(zhí)行 #if 和下一條指令間的所有代碼。

條件指令的語法如下:

    #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)算符可以是下列之一:

  • == (相等)
  • != (不相等)
  • && (與)
  • || (或)

你也可以通過括號(hào)使用組符號(hào)和組運(yùn)算符。條件指令用于編譯代碼生成 debug 或者是編譯特定配置時(shí)。一個(gè)條件指令以 #if 開頭并且必須明確的以 #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
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)