目錄
- 什麼是預處理指令符?
- 預處理指令符的使用
- 自定義指令符
- 使用Visual Studio快速定義指令符
- 定義指令符區域
什麼是預處理指令符?
當C#編譯器找到一條預處理指令#if,最後找到一條指令時,#endif僅在定義了指定符號的情況下,編譯器才會在這些指令之間編譯程式碼。與C和C ++不同,您不能將數字值分配給符號。#if C#中的語句為布林型,僅測試符號是否已定義。
預處理指令符的使用
- #if:開啟條件編譯,僅在定義了指定符號的情況下才編譯程式碼。
- #elif:根據是否定義了指定的符號,關閉前面的條件編譯並開啟新的條件編譯。
- #else:如果未定義先前指定的符號,則關閉之前的條件編譯並開啟新的條件編譯。
- #endif:關閉前面的條件編譯。
條件編譯(編譯器會根據不同配置環境來執行):
#if DEBUG Console.WriteLine("我是debug 模式!"); #elif RELEASE Console.WriteLine("我是relsease 模式!"); #else Console.WriteLine("我是自定義模式!"); #endif Console.WriteLine("我是沒有被任何預處理過得輸出!");
當前解決方案編譯環境為Debug
輸出結果:
常用指令符:
自定義指令符
舉例:我們需要兩個版本的程式碼,基礎版、更多功能的企業版本。此時我們就可以通過自定義指令符來滿足定製化功能。
- #define 自定義指令符
- #undef 刪除指令符
也可以通過屬性的方式來執行方法
使用Visual Studio快速定義指令符
VS站點-》右鍵-》屬性-》生成-》常規
定義生效後,通過csproj工程檔案我們可以看到有兩條PropertyGroup對應不同的Condition
定義指令符區域
你還可以使用以下兩個預處理程式指令定義可以摺疊在大綱中的程式碼區域:
- #region:開始一個區域。
- #endregion:結束區域
#region MyClass definition public class MyClass { static void Main() { } } #endregion
參考連結
https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/preprocessor-directives
https://blog.walterlv.com/post/how-to-define-preprocessor-symbols.html