目錄
- 預處理指令簡介
- #define、#undef
- #if、#elif、#else、#endif
- #warning、#error
- #region、#endregion
- #line、#line default
- #pragma
預處理指令簡介
微軟對預處理指令解釋鏈接
https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/preprocessor-directives/index
預處理指令不會轉化為可執行代碼中的命令,但會影響編譯過程的各個方面。例如使用預處理指令可以禁止編譯器編譯代碼的某一部分。
預處理器指令的開頭都有符號#
#define、#undef
#define的用法如下所示:
#define DEBUG
它告訴編譯器存在給定名稱的符號,在本例中是DEBUG。這有點類似于聲明的一個變量,但這個變量并沒有真正的值,只是存在而已。這個符號不是實際代碼的一部分,而只在編譯器編譯代碼時存在。在C#代碼中它沒有任何意義。
#undef 刪除符號的定義:
#undef DEBUG
如果符號不存在,#undef就沒有任何作用。同樣如果符號已經存在,則define也不起作用。
必須把#define和#undef命令放在C#文件的開頭位置,在聲明要編譯的任何對象的代碼之前。
#if、#elif、#else、#endif
#if與#endif
# if DEBUG
。。。。。。。代碼
# endif
包含在#if與#endif之間代碼只有在定義了符號DEBUG后才會執行,否則將會忽略代碼。
#elif(=else if)、#else
這兩個預處理指令就和if/else的指令用法一樣。
#if與#elif還支持一組邏輯運算符操作,“!”、“==”、“!=”、“||”。如果符號存在認為是true否則為false。
#warning、#error
當編譯器遇到這兩個指令時,會分別產生警告或錯誤。
- 如果編譯器遇到#warning指令,會向用戶顯示#warning指令后邊的文本,之后編譯繼續進行。
- 如果編譯器遇到#error指令,會向用戶顯示#error指令后邊的文本,作為一條編譯錯誤消息,然后會立即退出編譯,不會生成IL代碼。
#region、#endregion
#region和#endregion指令用于把一段代碼視為有給定名稱的一個塊
#region 代碼片名稱
在這里插入代碼片
#endregion
在vs中使用#region和#endregion指令的塊可以被折疊。這樣代碼布局看起來更合理。
#line、#line default
#line指令可以用于改變編譯器在警告和錯誤信息中顯示的文件名和行號信息。這條指令用的并不多。
#line default把行號還原為默認的行號
#pragma
#pragma指令可以抑制或者還原指定的編譯警告。與命令行選項不同,#pragma指令可以在類或方法級別實現,對抑制警告的內容和抑制的時間進行更精細的控制。
下邊的例子禁止字段未使用警告,然后在編譯MyClass類后還原警告:
#pragma warning disable 169
public class MyClass
{
int A=1;
}
#pragma warning restore 169