目錄
預處理指令簡介
微軟對預處理指令解釋鏈接
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