<p>DELPHIにはコンパイラバージョンが#DEFINEで定義されています。<br />
各VersionのDelphi/C++Builderに対するコンパイラバージョン定義は下記の通り</p>
<table border="1" cellspacing="0" cellpadding="0" width="300">
    <tbody>
        <tr>
            <th>Delphiバージョン</th>
            <th>定義</th>
        </tr>
        <tr>
            <td>Delphi1</td>
            <td>VER80</td>
        </tr>
        <tr>
            <td>Delphi2</td>
            <td>VER90</td>
        </tr>
        <tr>
            <td>Delphi3</td>
            <td>VER100</td>
        </tr>
        <tr>
            <td>Delphi4</td>
            <td>VER120</td>
        </tr>
        <tr>
            <td>Delphi5</td>
            <td>VER130</td>
        </tr>
        <tr>
            <td>Delphi6</td>
            <td>VER140</td>
        </tr>
        <tr>
            <td>Kylix</td>
            <td>VER140</td>
        </tr>
        <tr>
            <td>Delphi7</td>
            <td>VER150</td>
        </tr>
        <tr>
            <td>Delphi8</td>
            <td>VER160</td>
        </tr>
        <tr>
            <td>Delphi2005</td>
            <td>VER170</td>
        </tr>
        <tr>
            <td>BDS2006</td>
            <td>VER180</td>
        </tr>
        <tr>
            <td>TurboDelphi</td>
            <td>VER180</td>
        </tr>
        <tr>
            <td>Delphi2007</td>
            <td>VER185(VER180)</td>
        </tr>
        <tr>
            <td>Delphi2009</td>
            <td>VER200</td>
        </tr>
        <tr>
            <td>Delphi2010</td>
            <td>VER210</td>
        </tr>
        <tr>
            <td>Delphi XE</td>
            <td>VER220</td>
        </tr>
    </tbody>
</table>
<table border="1" cellspacing="0" cellpadding="0" width="300">
    <tbody>
        <tr>
            <th>C++Builderバージョン</th>
            <th>定義</th>
        </tr>
        <tr>
            <td>C++Builder1</td>
            <td>VER93</td>
        </tr>
        <tr>
            <td>C++Builder3</td>
            <td>VER110</td>
        </tr>
        <tr>
            <td>C++Builder4</td>
            <td>VER125</td>
        </tr>
        <tr>
            <td>C++Builder5</td>
            <td>VER130</td>
        </tr>
        <tr>
            <td>C++Builder6</td>
            <td>VER140</td>
        </tr>
        <tr>
            <td>BDS2006</td>
            <td>VER180</td>
        </tr>
        <tr>
            <td>TurboC++</td>
            <td>VER180</td>
        </tr>
        <tr>
            <td>C++Builder2007</td>
            <td>VER185(VER180)</td>
        </tr>
        <tr>
            <td>C++Builder2009</td>
            <td>VER200</td>
        </tr>
        <tr>
            <td>C++Builder2010</td>
            <td>VER210</td>
        </tr>
        <tr>
            <td>C++BuilderXE</td>
            <td>VER220</td>
        </tr>
    </tbody>
</table>
<p>だから、例えばソース中に</p>
<pre class="brush:delphi">
{&#36;IFDEF VER170}
  ShowMessage('Delphi2005です');
{&#36;ENDIF}
</pre>
<p>と書くことによって、Delphi2005のみメッセージが表示されるようにソースが書けます。<br />
Delphi2007だけは、2006とコンパイラの言語仕様に変更がないためVER180もVER185も定義されています。<br />
Delphiのコンパイラバージョンを調べるプログラムを書いておきます。</p>
<pre class="brush:delphi" title="Delphi/BCBコンパイラバージョンチェック">
program DelphiCompilerVerChk;

uses
  SysUtils, Windows;

{&#36;R *.res}

{-------------------------------
//      文字列を追加する関数
機能:       StringAdd(S, 'メッセージ')
            とすると、改行で区切られてSにメッセージが追加される
            StringAdd(S, 'メッセージ' '/')
            とすると、『/』で区切られてメッセージが追加される
備考:       
履歴:       2009/08/28(金)
              作成
//--▼----------------------▽--}
procedure StringAdd(var OriginalText: String; 
  Const AddText: String; Const Separator: String = #13#10);
var
  i: Integer;
  LenOriginal, LenSeparator, LenAdd: Integer;
begin
  if OriginalText = '' then
  begin
    OriginalText := AddText;
  end else
  begin
    LenOriginal := Length(OriginalText);
    LenSeparator:= Length(Separator);
    LenAdd      := Length(AddText);
    SetLength(OriginalText, LenOriginal + LenSeparator + LenAdd);
    for i := 1 to LenSeparator do
    begin
      OriginalText[LenOriginal + i] := Separator[i];
    end;
    for i := 1 to LenAdd do
    begin
      OriginalText[LenOriginal + LenSeparator + i] := AddText[i];
    end;
  end;
end;
//--△----------------------▲--

var
  MsgStr: String;
begin
  MsgStr := 'Version不明';

{&#36;IFDEF VER80}  MsgStr := 'Delphi1';                    {&#36;ENDIF}

{&#36;IFDEF VER90}  MsgStr := 'Delphi2';                    {&#36;ENDIF}

{&#36;IFDEF VER93}  MsgStr := 'C++Builder1';                {&#36;ENDIF}

{&#36;IFDEF VER100} MsgStr := 'Delphi3';                    {&#36;ENDIF}

{&#36;IFDEF VER110} MsgStr := 'C++Builder3';                {&#36;ENDIF}

{&#36;IFDEF VER120} MsgStr := 'Delphi4';                    {&#36;ENDIF}

{&#36;IFDEF VER125} MsgStr := 'C++Builder4';                {&#36;ENDIF}

{&#36;IFDEF VER130} MsgStr := 'Delphi5';                    {&#36;ENDIF}
{&#36;IFDEF VER130} StringAdd(MsgStr, 'C++Builder5');       {&#36;ENDIF}

{&#36;IFDEF VER140} MsgStr := 'Delphi6';                    {&#36;ENDIF}
{&#36;IFDEF VER140} StringAdd(MsgStr, 'C++Builder6');       {&#36;ENDIF}
{&#36;IFDEF VER140} StringAdd(MsgStr, 'Kylix/2/3');         {&#36;ENDIF}

{&#36;IFDEF VER150} MsgStr := 'Delphi7';                    {&#36;ENDIF}

{&#36;IFDEF VER160} MsgStr := 'Delphi8';                    {&#36;ENDIF}

{&#36;IFDEF VER170} MsgStr := 'Delphi2005';                 {&#36;ENDIF}

{&#36;IFDEF VER180} MsgStr := 'BDS 2006(Delphi/C++)';       {&#36;ENDIF}
{&#36;IFDEF VER180} StringAdd(MsgStr, 'Turbo Delphi/C++');  {&#36;ENDIF}

{&#36;IFDEF VER185} MsgStr := 'Delphi2007';                 {&#36;ENDIF}
{&#36;IFDEF VER185} StringAdd(MsgStr, 'C++Builder2007');    {&#36;ENDIF}

{&#36;IFDEF VER200} MsgStr := 'Delphi2009';                 {&#36;ENDIF}
{&#36;IFDEF VER200} StringAdd(MsgStr, 'C++Builder2009');    {&#36;ENDIF}

{&#36;IFDEF VER210} MsgStr := 'Delphi2010';                 {&#36;ENDIF}
{&#36;IFDEF VER210} StringAdd(MsgStr, 'C++Builder2010');    {&#36;ENDIF}

{&#36;IFDEF VER220} MsgStr := 'Delphi XE';                  {&#36;ENDIF}
{&#36;IFDEF VER220} StringAdd(MsgStr, 'C++Builder XE');     {&#36;ENDIF}

  Windows.MessageBox(0,
    PChar(MsgStr),
    PChar(ExtractFileName(ParamStr(0))), MB_OK);

end.</pre>