C 預處理指令

2022-04-11 02:20:31 字數 2546 閱讀 5923

雖然同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 預處理指令

巨集定義指令定義了乙個識別符號 巨集名 及乙個字串,在源程式中每次遇到該識別符號時,均以定義的字串替換它 巨集替換 巨集名和引數間不能有空格,識別符號和字串間可有任意空格 字串中應習慣對巨集引數加上括號,這樣使用巨集時,如果實參是表示式,則不易出錯 巨集替換只作巨集名和引數替換,不做計算,不做表示式...