2008-09-29 85 views

回答

24

使用此:

{$IFDEF DEBUG} 
... 
{$ENDIF} 
+0

並確保項目選項定義DEBUG。我認爲只有較新的Delphi(D2007及更高版本)版本會將其默認設置爲調試版本。 – 2008-09-29 07:49:38

+4

對於舊版本,您可以使用{$ IFOPT D +}。 'D'是「編譯調試信息」的編譯器選項符號。'D +'表示如果該選項爲* ON *,那麼應該只編譯後面的內容。 – Deltics 2010-01-09 21:52:52

+1

爲了提高可讀性{$ IFDEF DEBUG}的可移植性,您當然可以在標準定義包含文件中包含{$ IFOPT C +} {$ DEFINE DEBUG} {$ ENDIF}之類的內容(在與Delphi版本相關的章節中,不要自動爲你定義DEBUG,但請注意,這個「自動定義」並不總是可靠的。DEBUGINFO我認爲是自動定義的,但DEBUG僅在DEBUG構建的默認條件爲原樣時才被定義(它們是包括DEBUG作爲一個「工廠」設置,但是這個可以並且可以被刪除,也就是說,當構建調試信息時,它不是一個「內置」定義。 – Deltics 2010-01-09 21:56:07

7

除了什麼lassevk說,你也可以使用編譯器評價的其他一些方法(因爲德爾福6,我相信):

{$IF NOT DECLARED(SOME_SYMBOL)} 
    // Mind you : The NOT above is optional 
{$ELSE} 
{$IFEND} 

檢查如果編譯器具有此功能,請使用:

{$IFDEF CONDITIONALEXPRESSIONS} 

這有幾種用法。

例如,您可以檢查RTL的版本;從德爾福幫助:

可以在$ IF使用RTLVersion 表達式來測試運行時 庫版本級別的編譯器版本級別的獨立 。
實施例:{$ IF RTLVersion> = 16.2} ... {$ IFEND}

此外,編譯器版本本身可以被檢查,再次從代碼:

CompilerVersion被分配一個值爲 的編譯器在編譯時系統單元爲 。它指示編譯器功能/ 語言語法的修訂版 級別,該語法語句可獨立於RTLVersion而提前 。 CompilerVersion可以在$ IF 表達式中測試,應該使用 而不是測試VERxxx 條件定義。總是測試 大於或小於已知的 修訂版級別。對於特定修訂級別的 測試是一個不好的主意。

再就是我經常這樣做,就是定義時,它沒有定義,但(尼斯前向兼容性),這樣的符號:

{$IF NOT DECLARED(UTF8String)} 
type 
    UTF8String = type AnsiString; 
{$IFEND} 

希望這有助於!

3

這些控制指令可用:

{$IFDEF} 
{$ELSE} 
{$ENDIF} 
{$IFNDEF} //if *not* defined 

並且它們可被用作如下所示:

procedure TfrmMain.Button1Click(Sender: TObject); 
begin 
    {$IFDEF MY_CONDITIONAL} 
    ShowMessage('my conditional IS defined!'); 
    {$ELSE} 
    ShowMessage('my conditional is NOT defined!'); 
    {$ENDIF} 

    {$IFNDEF MY_CONDITIONAL} 
    ShowMessage('My conditional is explicitly NOT defined'); 
    {$ENDIF} 
end; 
5

DebugHook設定應用程序是否在IDE調試器下運行。不同於編譯器指令,但仍然非常有用。例如:

ReportMemoryLeaksOnShutdown := DebugHook <> 0; // show memory leaks when debugging