Delphi コンパイラバージョンと条件付きコンパイルディレクティブ参照

コンパイラバージョン定数の一覧

Delphi および C++Builder 開発において、ソースコードの互換性を維持するためには、コンパイラのバージョンを識別する定数 VERxxx の理解が不可欠です。以下の表は、主要なリリースバージョンと内部バージョン番号、および対応するプラットフォームを示しています。

内部バージョン 製品バージョン サポートプラットフォーム (Delphi)
VER300Delphi Seattle / C++Builder SeattleWin32, Win64, OSX, iOS, Android
VER290Delphi XE8 / C++Builder XE8Win32, Win64, OSX, iOS, Android
VER280Delphi XE7 / C++Builder XE7Win32, Win64, OSX, iOS, Android
VER270Delphi XE6 / C++Builder XE6Win32, Win64, OSX, iOS, Android
VER260Delphi XE5 / C++Builder XE5Win32, Win64, OSX, iOS, Android (C++ は iOS 非対応)
VER250Delphi XE4 / C++Builder XE4Win32, Win64, OSX, iOS (C++ は iOS 非対応)
VER240Delphi XE3 / C++Builder XE3Win32, Win64, OSX
VER230Delphi XE2 / C++Builder XE2Win32, Win64, OSX (C++ は Win32, OSX)
VER220Delphi XE / C++Builder XEWin32
VER210Delphi 2010 / C++Builder 2010Win32
VER200Delphi 2009 / C++Builder 2009Win32
VER190Delphi 2007 for .Net.Net
VER180/185Delphi 2007 / C++Builder 2007Win32
VER170Delphi 2005Win32, .Net
VER160Delphi 8 for .Net.Net
VER150Delphi 7Win32
VER140Delphi 6 / C++Builder 6Win32
VER130Delphi 5 / C++Builder 5Win32
VER120Delphi 4Win32
VER100Delphi 3Win32
VER90Delphi 2Win32
VER80Delphi 1Win32
VER70Borland Pascal 7.0DOS
VER60Turbo Pascal 6.0DOS

XE2 Update 2 における FireMonkey パッケージのバージョンは 161 です (fmi161.bpl など)。

バージョン番号の判定方法

ソースコード内でコンパイラバージョンに基づいて処理を分岐させるには、条件付きコンパイルディレクティブを使用します。また、実行時にバージョン情報を取得することも可能です。

コンパイル時の判定

以下の例では、特定のバージョン以降でのみ有効となる機能を定義しています。

{$IF CompilerVersion >= 25.0}
  {$DEFINE MODERN_FEATURES_ENABLED}
  {$MESSAGE NOTE 'Modern features activated'}
{$ELSE}
  {$MESSAGE WARN 'Legacy compiler detected'}
{$ENDIF}

実行時のバージョン取得

実行時にコンパイラバージョンを確認するための関数実装例です。

function GetBuildVersionInfo: string;
begin
  Result := Format('Compiler Build: %.1f', [System.CompilerVersion]);
end;

主要なバージョン番号の対応関係は以下の通りです。

  • Delphi 10.1 Berlin: 31.0
  • Delphi XE3: 24.0
  • Delphi XE2: 23.0
  • Delphi XE: 22.0
  • Delphi 2010: 21.0
  • Delphi 2009: 20.0
  • Delphi 2007: 18.5
  • Delphi 2006: 18.0
  • Delphi 7: 15.0

主要コンパイラディレクティブ

コンパイラの動作を制御するための主要なディレクティブをカテゴリ別に示します。

機能カテゴリ ディレクティブ 関連シンボル
条件付きコンパイルIFDEF, IFNDEF, IF, ELSE, ENDIF{$IFDEF}, {$IF}, {$ELSE}
デバッグ情報Debug Information{$D}, {$DEBUGINFO}
最適化Optimization{$O}, {$OPTIMIZATION}
範囲チェックRange Checking{$R}, {$RANGECHECKS}
オーバーフローチェックOverflow Checking{$Q}, {$OVERFLOWCHECKS}
アラインメントAlign Fields{$A}, {$ALIGN}
リソースResource File{$R}, {$RESOURCE}
メッセージ出力Message Directive{$MESSAGE}
RTTI 制御Run-Time Type Information{$M}, {$TYPEINFO}, {$RTTI}
プラットフォーム設定PE Header Flags{$SetPEFlags}, {$SETPEOSVERSION}
文字列設定Long Strings{$H}, {$LONGSTRINGS}
ポインタ数学Pointer Math{$POINTERMATH}

事前定義済み条件付きシンボル

ターゲットプラットフォームや CPU アーキテクチャに応じて、コンパイラにより自動的に定義されるシンボルです。これらを使用することで、プラットフォーム依存コードを管理できます。

カテゴリ シンボル 説明
コンパイラ識別DCCDelphi コンパイラで使用される基本シンボル
OS 環境MSWINDOWSWindows プラットフォーム全体を示す (WIN32 より推奨)
OS 環境WIN3232-bit Windows ターゲット
OS 環境WIN6464-bit Windows ターゲット (XE2 以降)
OS 環境MACOS / MACOS32Mac OS X ターゲット (XE2 以降)
OS 環境IOS / IOSARMiOS デバイスターゲット (XE4 以降)
OS 環境ANDROIDAndroid デバイスターゲット (XE5 以降)
OS 環境LINUX / POSIXKylix 以降の Linux/POSIX 環境
CPU アーキテクチャCPU386 / CPUX86Intel 386 互換以上
CPU アーキテクチャCPUX64x86-64 命令セット環境
CPU アーキテクチャCPUARM / CPUARM3232-bit ARM アーキテクチャ
CPU アーキテクチャCPUARM6464-bit ARM アーキテクチャ
機能可用性UNICODE文字列型が Unicode として定義されている
機能可用性AUTOREFCOUNT自動参照カウント機能が有効 (モバイルコンパイラ等)
機能可用性NEXTGEN次世代言語機能 (0-based strings 等) が有効
機能可用性CONDITIONALEXPRESSIONS$IF ディレクティブの使用可否
リンカーEXTERNALLINKER外部リンカー (LLVM 等) を使用

コンパイラ実行ファイルの対応関係:

  • DCC32: 32-bit Windows 用コンパイラ
  • DCC64: 64-bit Windows 用コンパイラ
  • DCCOSX: Mac OS X 用コンパイラ
  • DCCIOSARM: 32-bit iOS デバイス用
  • DCCIOSARM64: 64-bit iOS デバイス用
  • DCCAARM: Android デバイス用

複雑な条件付きコンパイルの構成例

複数の条件を組み合わせて機能を制御する実装パターンです。

{$IFDEF CONDITIONALEXPRESSIONS}
  {$IF CompilerVersion >= 17.0}
    {$DEFINE SUPPORTS_INLINE_FUNCTIONS}
  {$IFEND}
  {$IF RTLVersion >= 14.0}
    {$DEFINE SUPPORTS_EXTENDED_IO}
  {$IFEND}
{$ENDIF}

タグ: Delphi object-pascal compiler-directives conditional-compilation win32

6月10日 22:01 投稿