if的作用是程序流控制,會直接編譯、執行。
#if是對編譯器的指令,其作用是告訴編譯器,有些語句行希望在條件滿足時才編譯。
--------------------------------------------------------------------------------------------------------------------
#if 使您可以開始條件指令,測試一個或多個符號以查看它們是否計算為 true。如果它們的計算結果確實為 true,則編譯器將計算位於 #if 與最近的 #endif 指令之間的所有代碼。例如,
可以使用運算符 ==(相等)、!=(不相等)、&&(與)及 ||(或)來計算多個符號。還可以用括號將符號和運算符分組。
使用 #if 以及 #else、#elif、#endif、#define 和 #undef 指令,可以包括或排除基於由一個或多個符號組成的條件的代碼。這在編譯調試版本的代碼或編譯特定配置時最為有用。
以 #if 指令開始的條件指令必須用 #endif 指令顯式終止。
#define 使您可以定義一個符號,通過將該符號用作傳遞給 #if 指令的表達式,使該表達式計算為 true。
也可以用 /define 編譯器選項來定義符號。可以用 #undef 來取消定義符號。
用 /define 或 #define 定義的符號與具有同一名稱的變量不沖突。即,不應將變量名傳遞到預處理器指令,並且只能用預處理器指令計算符號。
用 #define 創建的符號的范圍是在其中定義該符號的文件。
// preprocessor_if.cs #define DEBUG#define VC_V7 using System; public class MyClass { static void Main() { #if (DEBUG && !VC_V7) Console.WriteLine("DEBUG is defined"); #elif (!DEBUG && VC_V7) Console.WriteLine("VC_V7 is defined"); #elif (DEBUG && VC_V7) Console.WriteLine("DEBUG and VC_V7 are defined"); #else Console.WriteLine("DEBUG and VC_V7 are not defined"); #endif } }
輸出
DEBUG and VC_V7 are defined