前置處理器指令以 # 開頭,**不會編譯為可執行 IL 代碼**,但會影響編譯器的編譯行為。常見用途:條件編譯、版本控制、平台適配、程式碼區塊管理。
重要區別:C# 沒有獨立的前置處理器 (C/C++ 有),所有指令由編譯器直接處理。
#define DEBUG // 定義 DEBUG 符號
#undef TRACE // 移除 TRACE 符號
#if 判斷存在性#define MAX 100,C# 不支援)根據符號決定是否編譯特定程式碼區塊:
static void PrintVersion()
{
#if V3
Console.WriteLine("Version 3.0");
#elif V2
Console.WriteLine("Version 2.0");
#else
Console.WriteLine("Version 1.0");
#endif
}
#if 和 #elif 支援:
==、!=:符號存在性比較&&、||:邏輯 AND/OR#if DEBUG || (TRACE == true) // 定義了 DEBUG 或 TRACE 符號
// ...
#endif
符號存在視為 true,不存在視為 false。
除了 #if,C# 還提供 [Conditional("SYMBOL")] 屬性標記方法,若符號未定義,方法呼叫與主體皆會被移除:
[Conditional("DEBUG")]
void Log(string msg) { Console.WriteLine(msg); }
// 發布版 (未定義 DEBUG) 時,Log() 呼叫點會被完全移除
此方式更符合現代 C# 風格,建議優先考慮。
下一篇將介紹進階指令:
#warning/#error 編譯期診斷#region/#endregion 程式碼摺疊#line 行號控制#pragma warning 精細警告控制