コンパイラバージョン定数の一覧
Delphi および C++Builder 開発において、ソースコードの互換性を維持するためには、コンパイラのバージョンを識別する定数 VERxxx の理解が不可欠です。以下の表は、主要なリリースバージョンと内部バージョン番号、および対応するプラットフォームを示しています。
| 内部バージョン | 製品バージョン | サポートプラットフォーム (Delphi) |
|---|---|---|
| VER300 | Delphi Seattle / C++Builder Seattle | Win32, Win64, OSX, iOS, Android |
| VER290 | Delphi XE8 / C++Builder XE8 | Win32, Win64, OSX, iOS, Android |
| VER280 | Delphi XE7 / C++Builder XE7 | Win32, Win64, OSX, iOS, Android |
| VER270 | Delphi XE6 / C++Builder XE6 | Win32, Win64, OSX, iOS, Android |
| VER260 | Delphi XE5 / C++Builder XE5 | Win32, Win64, OSX, iOS, Android (C++ は iOS 非対応) |
| VER250 | Delphi XE4 / C++Builder XE4 | Win32, Win64, OSX, iOS (C++ は iOS 非対応) |
| VER240 | Delphi XE3 / C++Builder XE3 | Win32, Win64, OSX |
| VER230 | Delphi XE2 / C++Builder XE2 | Win32, Win64, OSX (C++ は Win32, OSX) |
| VER220 | Delphi XE / C++Builder XE | Win32 |
| VER210 | Delphi 2010 / C++Builder 2010 | Win32 |
| VER200 | Delphi 2009 / C++Builder 2009 | Win32 |
| VER190 | Delphi 2007 for .Net | .Net |
| VER180/185 | Delphi 2007 / C++Builder 2007 | Win32 |
| VER170 | Delphi 2005 | Win32, .Net |
| VER160 | Delphi 8 for .Net | .Net |
| VER150 | Delphi 7 | Win32 |
| VER140 | Delphi 6 / C++Builder 6 | Win32 |
| VER130 | Delphi 5 / C++Builder 5 | Win32 |
| VER120 | Delphi 4 | Win32 |
| VER100 | Delphi 3 | Win32 |
| VER90 | Delphi 2 | Win32 |
| VER80 | Delphi 1 | Win32 |
| VER70 | Borland Pascal 7.0 | DOS |
| VER60 | Turbo Pascal 6.0 | DOS |
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 アーキテクチャに応じて、コンパイラにより自動的に定義されるシンボルです。これらを使用することで、プラットフォーム依存コードを管理できます。
| カテゴリ | シンボル | 説明 |
|---|---|---|
| コンパイラ識別 | DCC | Delphi コンパイラで使用される基本シンボル |
| OS 環境 | MSWINDOWS | Windows プラットフォーム全体を示す (WIN32 より推奨) |
| OS 環境 | WIN32 | 32-bit Windows ターゲット |
| OS 環境 | WIN64 | 64-bit Windows ターゲット (XE2 以降) |
| OS 環境 | MACOS / MACOS32 | Mac OS X ターゲット (XE2 以降) |
| OS 環境 | IOS / IOSARM | iOS デバイスターゲット (XE4 以降) |
| OS 環境 | ANDROID | Android デバイスターゲット (XE5 以降) |
| OS 環境 | LINUX / POSIX | Kylix 以降の Linux/POSIX 環境 |
| CPU アーキテクチャ | CPU386 / CPUX86 | Intel 386 互換以上 |
| CPU アーキテクチャ | CPUX64 | x86-64 命令セット環境 |
| CPU アーキテクチャ | CPUARM / CPUARM32 | 32-bit ARM アーキテクチャ |
| CPU アーキテクチャ | CPUARM64 | 64-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}