定義和取消定義符號

編譯器符號是在編譯時定義的關鍵字,可以檢查該關鍵字以有條件地執行特定的程式碼段。

有三種方法可以定義編譯器符號。它們可以通過程式碼定義:

#define MYSYMBOL

它們可以在 Visual Studio 中的專案屬性>構建>條件編譯符號下定義:

VS 編譯器符號

(請注意,DEBUGTRACE 有自己的核取方塊,不需要明確指定。)

或者可以使用 C#編譯器 csc.exe 上的/define:[name] 開關在編譯時定義它們。

你還可以使用 #undefine 指令定義未定義的符號。

最常見的示例是 DEBUG 符號,當在除錯模式下編譯應用程式時(相對於釋出模式),它由 Visual Studio 定義。

public void DoBusinessLogic()
{
    try
    {
        AuthenticateUser();
        LoadAccount();
        ProcessAccount();
        FinalizeTransaction();
    }
    catch (Exception ex)
    {
#if DEBUG
        System.Diagnostics.Trace.WriteLine("Unhandled exception!");
        System.Diagnostics.Trace.WriteLine(ex);
        throw;
#else
        LoggingFramework.LogError(ex);
        DisplayFriendlyErrorMessage();
#endif
    }
}

在上面的示例中,當應用程式的業務邏輯中發生錯誤時,如果應用程式在除錯模式下編譯(並且設定了 DEBUG 符號),則錯誤將寫入跟蹤日誌,並且異常將重新生成 -thrown 用於除錯。但是,如果應用程式是在釋出模式下編譯的(並且未設定 DEBUG 符號),則使用日誌記錄框架來安靜地記錄錯誤,並向終端使用者顯示友好的錯誤訊息。