if的作用是程式流量控制,會直接編譯、執行。
#if是對編譯器的指令,其作用是告訴編譯器,有些語句行希望在條件滿足時才編譯。
--------------------------------------------------------------------------------------------------------------------
#if 使您可以開始條件指令,測試一個或多個符號以查看它們是否計算為 true。如果它們的計算結果確實為 true,則編譯器將計算位於 #if 與最近的 #endif 指令之間的所有代碼。例如,
複製
#define DEBUG// ...#if DEBUG Console.WriteLine("Debug version");#endif
可以使用運算子 ==(相等)、!=(不相等)、&&(與)及 ||(或)來計算多個符號。還可以用括弧將符號和運算子分組。
備忘
使用 #if 以及 #else、#elif、#endif、#define 和 #undef 指令,可以包括或排除基於由一個或多個符號組成的條件的代碼。這在編譯調試版本的代碼或編譯特定配置時最為有用。
以 #if 指令開始的條件指令必須用 #endif 指令顯式終止。
#define 使您可以定義一個符號,通過將該符號用作傳遞給 #if 指令的運算式,使該運算式計算為 true。
也可以用 /define 編譯器選項來定義符號。可以用 #undef 來取消定義符號。
用 /define 或 #define 定義的符號與具有同一名稱的變數不衝突。即,不應將變數名傳遞到前置處理器指令,並且只能用前置處理器指令計算符號。
用 #define 建立的符號的範圍是在其中定義該符號的檔案。
樣本
複製
// preprocessor_if.cs#define DEBUG#define VC_V7using 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