預編譯又稱為預處理,是做些代碼文本的替換工作。處理#開頭的指令,比如拷貝#include包含的文件代碼,#define宏定義的替換,條件編譯等,就是為編譯做的預備工作的階段,主要處理#開始的預編譯指令。
下面對C#中的預編譯指令進行介紹:
1.#define和#undef
用法:
#define DEBUG
#undef DEBUG
#define告訴編譯器,我定義了一個DEBUG的一個符號,他類似一個變量,但是它沒有具體的值,可以將它看為一個符號而已。#undef就是刪除這個符號的定義。如果符號DEBUG沒定義過,則#undef不起作用,否則#define不起作用。二者都必須放在源代碼之前。二者的順序看代碼的順序:
#define DEBUG
#undef DEBUG
這樣的話,DEBUG是沒有定義的,如果二者換個順序,編譯器就認為DEBUG被定義了
2.#if、#elif、#else、#endif
這個告訴編譯器進行編譯代碼的流程控制。考慮下面代碼:
#if DEBUG
Console.Write("debug");
#elif RELEASE
Console.Write("realse");
#else
Console.Write("other");
#endif
以上代碼就是說如果定義了DEBUG則輸出debug,定義了RELEASE,則輸出realse,否則輸出other。如果定義了DEBUG和REALSE會怎麼樣呢?各位可以自己試一下。
3.#warning、#error
通過這兩個指定可以告訴編譯器,出一個警告還是錯誤信息。除了錯誤信息以後,編譯將停止。
參考下面的代碼:
#if DEBUG ------〉該DEBUG如果選中當前狀態為DEBUG,則這個默認為#define
#warning “現在是Ddbug狀態”
#elif RELEASE ------〉如果選中release狀態的話,這個確沒有默認,不知道我試驗的對不對
#warning “現在是Realse狀態”
#else
#error“並清楚什麼狀態”
#endif
4.#region 和#endregion
這個兩個用來組成代碼塊