天天看點

預處理指令

雖然同c和c++的術語“預處理指令”名稱一樣,但c#的其實并沒有單獨的預處理步驟,也就是說在vs等環境中并沒有預處理的編譯器。

預處理指令能夠用于替換源檔案中的資訊。以#(sharp)字元和預處理指令名稱開頭。例如:

習慣于将預處理指令的名稱全部設為大寫。和c與c++不同的是,c#中的預處理指令的名稱後不加數字等。c\c++所支援的宏函數在c#中也是不支援的。

還可以使用#region來設定一個區域,同時也可以通過visual studio讓代碼折疊。往往在#region後加上該區域的名稱的字元串,可以實作注釋的作用。

1.#undef

上面我們使用了#define,其實還是有#undef的。那麼它又是做什麼的呢?

如果我們debug程式,就會在控制台看到這樣一條:

如果我們release程式,得到的結果也還是一樣的,但是如果在代碼開頭加上:

再來debug控制台就不會有消息提示了。

2.#if、#else、#elif

如果想要控制台顯示max沒有定義的情況,那就用#else來搭配#if就可以了。

或許你在鍵入#else的時候也看到了#elif,這個自然就是對應的else if了。它們的邏輯和正常的if套裝是一樣的。

3.#warning、#error

這兩個預處理指令用于抛出異常和錯誤。

預處理指令
預處理指令

4.#line

我們還可以用#line将以下#error這行代碼的行數設定為10000行,并将檔案名設定為”錯誤“。

預處理指令

如果我們再添加這樣一行代碼,則會将行數和檔案名恢複為預設的。

預處理指令

5.#pragma

我們先在program類前加上這樣一行代碼,它會引發cs3021錯誤。

然後我們在上面這行代碼前加入以下這行代碼,其作用是禁用warning 3021。那麼再次debug就會發現原本的錯誤已經不在了。

如果想要在後文中恢複這個cs3021錯誤,就用restore即可。

以下是完整代碼。

這個預處理指令其實是非常複雜的,在各大百科上已經有了相關介紹,以下是維基百科上的。傳送門:pragma once。

感謝通路,希望對您有所幫助。 歡迎關注或收藏、評論或點贊。

為使本文得到斧正和提問,轉載請注明出處:

http://blog.csdn.net/nomasp