首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 預編譯指令完整指南:$DEFINE/$IFDEF/$IFOPT 條件編譯

     編輯:Delphi

條件編譯實現多版本構建:符號定義、條件判斷、編譯器開關檢測

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"
  • 無定義/其他符號 → 標題顯示 "Other"

多文件版本切換策略

  1. 統一版本符號命名(如 VER_STD/VER_LITE/VER_TRIAL)
  2. 各單元頂部定義同一符號
  3. 業務代碼用 {$IFDEF VER_STD} 區隔
  4. 切換版本時用 IDE「Find in Files」批量替換所有單元的定義行

限制: 符號僅在當前單元有效,無法單點定義全局生效,需配合批量替換工具。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved