Delphi 預編譯指令(以 {$ } 開頭)實現源碼級條件編譯,適用於同代碼庫構建標準版/學習版/試用版等多版本,增強代碼規範性與保密性。
| 指令 | 格式 | 說明 |
|---|---|---|
| DEFINE | {$DEFINE NAME} | 定義當前單元有效符號 |
| UNDEF | {$UNDEF NAME} | 取消已定義符號 |
| IFDEF | {$IFDEF NAME}...{$ENDIF} | 符號存在則編譯中間代碼 |
| IFNDEF | {$IFNDEF NAME}...{$ENDIF} | 符號不存在則編譯中間代碼 |
| IFOPT | {$IFOPT R+}...{$ENDIF} | 編譯器開關啟用則編譯 (如範圍檢查 $R+) |
| ELSE | {$ELSE} | 配合 IFDEF/IFNDEF/IFOPT 使用 |
| ENDIF | {$ENDIF} | 結束條件編譯塊 |
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Button1: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private a: string; end;
var Form1: TForm1;
implementation {$R *.dfm}
{$DEFINE AAA} {定義符號,改為 BBB 或註釋可切換版本}
procedure TForm1.FormCreate(Sender: TObject);
begin
a := 'Other';
{$IFDEF AAA} a := 'AAA'; {$ENDIF}
{$IFDEF BBB} a := 'BBB'; {$ENDIF}
end;
procedure TForm1.Button1Click(Sender: TObject);
begin Caption := a; end;
end.
{$DEFINE AAA} → 標題顯示 "AAA"{$DEFINE BBB} → 標題顯示 "BBB"VER_STD/VER_LITE/VER_TRIAL){$IFDEF VER_STD} 區隔限制: 符號僅在當前單元有效,無法單點定義全局生效,需配合批量替換工具。