雖然同c和c++的術語「預處理指令」名稱一樣,但c#的其實並沒有單獨的預處理步驟,也就是說在vs等環境中並沒有預處理的編譯器。
預處理指令能夠用於替換原始檔中的資訊。以#(sharp)字元和預處理指令名稱開頭。例如:
#define max
習慣於將預處理指令的名稱全部設為大寫。和c與c++不同的是,c#中的預處理指令的名稱後不加數字等。c\c++所支援的巨集函式在c#中也是不支援的。
還可以使用#region來設定乙個區域,同時也可以通過visual studio讓**摺疊。往往在#region後加上該區域的名稱的字串,可以實現注釋的作用。
#region c#預處理指令
#endregion
1.#undef
上面我們使用了#define,其實還是有#undef的。那麼它又是做什麼的呢?
#define max
static void main(string args)
如果我們debug程式,就會在控制台看到這樣一條:
max已經定義了。
如果我們release程式,得到的結果也還是一樣的,但是如果在**開頭加上:
#undef max
再來debug控制台就不會有訊息提示了。
2.#if、#else、#elif
如果想要控制台顯示max沒有定義的情況,那就用#else來搭配#if就可以了。
#if (max)
console.writeline("max已經定義了。");
#else
console.writeline("max還沒有定義。");
#endif
或許你在鍵入#else的時候也看到了#elif,這個自然就是對應的else if了。它們的邏輯和常規的if套裝是一樣的。
#define max
#undef max
#define min
static void main(string args)
3.#warning、#error
這兩個預處理指令用於丟擲異常和錯誤。
#warning 這是乙個強制丟擲的異常。
#error 這是乙個強制丟擲的錯誤。
我們還可以用#line將以下#error這行**的行數設定為10000行,並將檔名設定為」錯誤「。
如果我們再新增這樣一行**,則會將行數和檔名恢復為預設的。
#line 10000 "error"
#error 這是乙個強制丟擲的錯誤。
#line default
#warning 這是乙個強制丟擲的警告。
我們先在program類前加上這樣一行**,它會引發cs3021錯誤。
[clscompliant(false)]
然後我們在上面這行**前加入以下這行**,其作用是禁用warning 3021。那麼再次debug就會發現原本的錯誤已經不在了。
#pragma warning disable 3021
如果想要在後文中恢復這個cs3021錯誤,就用restore即可。
#pragma warning restore 3021
以下是完整**。
#pragma warning disable 3021
[clscompliant(false)]
class program
}#pragma warning restore 3021
[clscompliant(false)]
public class otherprogram
}
這個預處理指令其實是非常複雜的,在各大百科上已經有了相關介紹,以下是維基百科上的。傳送門:pragma once。 C 預處理指令
1.define 通常和 if一起使用 使用 define可以定義乙個符號,並通過將該符號用作表示式傳遞給 if 指令,使該表示式的計算結果為true 比如 preprocessor if.cs define debug define vc v7 using system public class ...
C預處理指令
一 預處理的由來 在c 的歷史發展中,有很多的語言特徵 特別是語言的晦澀之處 來自於c語言,預處理就是其中的乙個。c 從c語言那裡把c語言預處理器繼承過來 c語言預處理器,被bjarne博士簡稱為cpp,不知道是不是c program preprocessor的簡稱 二 常見的預處理功能 預處理器的...
C 預處理指令
巨集定義指令定義了乙個識別符號 巨集名 及乙個字串,在源程式中每次遇到該識別符號時,均以定義的字串替換它 巨集替換 巨集名和引數間不能有空格,識別符號和字串間可有任意空格 字串中應習慣對巨集引數加上括號,這樣使用巨集時,如果實參是表示式,則不易出錯 巨集替換只作巨集名和引數替換,不做計算,不做表示式...