預處理指令
C#預處理指令基本概念
雖然同C和C++的術語“預處理指令”名稱一樣,但C#的其實並沒有單獨的預處理步驟,也就是說在VS等環境中並沒有預處理的編譯器。
預處理指令能夠用於替換原始檔中的資訊。以#(Sharp)字元和預處理指令名稱開頭。例如:
#define MAX
習慣於將預處理指令的名稱全部設為大寫。和C與C++不同的是,C#中的預處理指令的名稱後不加數字等。C\C++所支援的巨集函式在C#中也是不支援的。
還可以使用#region來設定一個區域,同時也可以通過Visual Studio讓程式碼摺疊。往往在#region後加上該區域的名稱的字串,可以實現註釋的作用。
#region C#預處理指令
#endregion
5個預處理指令
1.#undef
上面我們使用了#define,其實還是有#undef的。那麼它又是做什麼的呢?
#define MAX
static void Main(string[] args)
{
#if (MAX)
Console.WriteLine("MAX已經定義了。");
#endif
}
如果我們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)
{
#if (MAX)
Console.WriteLine("MAX已經定義了。");
#elif (MIN)
Console.WriteLine("MIN已經定義了。");
#else
Console.WriteLine("MAX還沒有定義。");
#endif
Console.ReadLine();
}
3.#warning、#error
這兩個預處理指令用於丟擲異常和錯誤。
#warning 這是一個強制丟擲的異常。
#error 這是一個強制丟擲的錯誤。
4.#line
我們還可以用#line將以下#error這行程式碼的行數設定為10000行,並將檔名設定為”錯誤“。
static void Main(string[] args)
{
#line 10000 "錯誤"
#error 這是一個強制丟擲的錯誤。
}
如果我們再新增這樣一行程式碼,則會將行數和檔名恢復為預設的。
#line 10000 "Error"
#error 這是一個強制丟擲的錯誤。
#line default
#warning 這是一個強制丟擲的警告。
5.#pragma
我們先在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
{
static void Main(string[] args)
{}
}
#pragma warning restore 3021
[CLSCompliant(false)]
public class OtherProgram
{
public static void OtherMain()
{}
}
這個預處理指令其實是非常複雜的,在各大百科上已經有了相關介紹,以下是維基百科上的。傳送門:pragma once。
感謝訪問,希望對您有所幫助。 歡迎關注或收藏、評論或點贊。
為使本文得到斧正和提問,轉載請註明出處:
http://blog.csdn.net/nomasp
相關文章
- yai 請求預處理指令碼AI指令碼
- .net 預處理指令符的使用
- iOS開發#pragma預處理指令iOS
- 多用型別常量替代#define預處理指令型別
- 04@多用型別常量,少用#define預處理指令型別
- 影像預處理
- 預處理命令
- VS中使用預處理指令#pragma region自由摺疊程式碼
- 資料預處理
- 影像預處理方法
- bat批處理常用指令碼BAT指令碼
- BAT 批處理指令碼 教程BAT指令碼
- 資料預處理 demo
- linux指令碼-判斷程式是否存在,從而可以做預警處理..Linux指令碼
- 【scikit-learn基礎】--『預處理』之 缺失值處理
- 部分Windows批處理指令碼整理Windows指令碼
- 處理stdin輸入的字串指令字串
- nlp 中文資料預處理
- 機器學習一:資料預處理機器學習
- 文字檢測預處理地址
- 程式環境和預處理
- 影像預處理包括哪些東東?
- split用法與影像預處理
- 特徵工程之特徵預處理特徵工程
- 資料預處理規則
- 資料預處理的形式
- 預處理技術文獻
- 使用批處理指令碼或SHELL配合SQL指令碼指令碼SQL
- 第五篇:資料預處理(二) - 異常值處理
- 第四篇:資料預處理(一) - 缺失值處理
- C語言的本質(21)——預處理之三:其它預處理特性及總結C語言
- ORACLE問題處理十個指令碼Oracle指令碼
- c#常用的前處理器指令C#
- 指令碼處理iOS的Crash日誌指令碼iOS
- Linux 使用 shell 指令碼處理字串Linux指令碼字串
- Bash 指令碼中的錯誤處理指令碼
- 瞭解下C# 前處理器指令C#
- 查詢等待事件及處理指令碼事件指令碼