標籤:style blog http color 使用 strong
C#前置處理器指令是在編譯時間調用的。
前置處理器指令(preprocessor directive)告訴C#編譯器要編譯哪些代碼,並指出如何處理特定的錯誤和警告。
C#前置處理器指令還可以告訴C#編輯器有關程式碼群組織的資訊。
1. 定義符號和取消符號定義的預先處理指令#define 和 #undef
預先處理指令都以#號開頭並位於行首,前面可以出現空格符。
#define DEBUG#define ISSAY
上面的語句定義了一個先行編譯的符號,他的範圍是他所處的整個檔案,定義符號的語句必須出現在所有代碼之前, 否則編譯的時候會出現一個異常: 不能在檔案的第一個標記之後,定義或取消定義前置處理器符號 。我們也可以使用#undef來取消一個符號的定義,先來看個例子。
#define DEBUG#undef DEBUG#define ISSAY using System; namespace JustDoIt { class Program { static void Main(string[] args) { #if DEBUG Console.Write("debug."); #endif #if ISSAY Console.Write("hello."); #else Console.Write("you can say nothing."); #endif Console.ReadLine(); } } } //輸出:hello
從上面的代碼我們可以看到第一行定義了一個符號DEBUG,緊接著第二行取消了這個符號的定義,也就是相當於沒有定義一樣,所以程式啟動並執行時候不會執行Console.Write("debug.")這個語句。第三行定義了ISSAY符號,所以程式輸出了“hello”,如果我們把他注釋了或者是刪除了,那麼程式會輸出“you can say nothing“。我們可以初步看到通過定義先行編譯的符號,可以控制編譯器選擇性地編譯代碼。上面的代碼中還有#if和#endif這樣的符號,這些是條件編譯指令。
2. 條件編譯指令
條件編譯指令有4個,除了我們從第一個樣本看到的#if、#else、#endif之外,還有一個#elif。我們對這些指令應該有是曾相識的感覺,他們跟我們平時編寫代碼的時候試用的條件陳述式是一樣的,條件陳述式是用來控製程序流的,而這些條件編譯指令是用來控制編譯器選擇性地編譯代碼的。
一條#if語句可以有0條或多條#elif語句,也可以有0條或一條#else 語句,但必須包括一條#endif語句必須有,否則會出現語法錯誤。
3. #region和#endregion
這兩個符號平時我們肯定用的很多了,就是把一些相關的程式碼摺疊功能到一起,這樣對我們在一個檔案中編寫較長的代碼非常有用,我們可以把一組相關的代碼用#region和#endregion組織在一起並且可以在#region後面加上說明的文字,當這組代碼被摺疊起來的時候,我們可以看到#region後面的解說文字。
MSDN上的 C# 前置處理器指令 介紹
Visual Studio 2013
MSDN
本節包含有關以下 C# 前置處理器指令的資訊。
#if
#else
#elif
#endif
# define
#undef
#warning
#error
#line
#region
#endregion
#pragma
#pragma warning
#pragma checksum
請參見各個主題有關更多資訊和樣本。
雖然編譯器沒有單獨的前置處理器,本節中介紹的處理指示,就象一個。 它們在條件編譯用於協助。 與 C 和 C++ 指令不同,不能使用這些指令建立宏。
前置處理器指令必須是行上的唯一指令。