The Delphi Bug List

Entry No.
499
コンパイラ - コンパイル出来ない
TForm または TDataModule のクラス定義中に $IFDEF を使用したコードがコンパイル出来ない。ただし Delphi 4 と 5 には回避策がある
1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 4.03 5.0 5.01 6.0 6.01 6.02 Kylix 1.0
Unknown Gotcha Gotcha Gotcha Gotcha Gotcha Gotcha Gotcha Gotcha Gotcha Gotcha Gotcha Gotcha Gotcha Gotcha
解説
Reported by Eric Maddox; checked by Reinier Sterkenburg
以下のコードは、フォーム(またはデータモジュール)のクラス定義の解析中のエラーを回避するサンプルです。このエラーに気付いた時、私はデータモジュールの子クラスを変更するために IFDEF を使おうとしていました。IFDEF の中にセミコロンを追加するという対処は、決して正しいものではありません。
unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Unit2;

type
{$IFDEF MyCompilerDirective}
  TForm3 = class(TForm)
{$Else}
{$IFDEF HandleParserError} ; {ここがコンパイルされることはありません。これは回避策です}{$ENDIF}
  TForm3 = class(TForm2)
{$EndIF}
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form3: TForm3;

implementation

{$R *.DFM}

end.
- Delphi 4 と 5 では、": が必要な場所に = があります" が発生します。
- Delhpi 2 と 3 では、二つ目の宣言で "不正なフィールド定義" が発生します。

これは、あらゆるフォームとデータモジュールの子フォームまたは子データモジュールを変更するのに IFDEF を使用する場合に影響します。
この問題はフォームとデータモジュールの場合にのみ発生します。

この回避方法は Delphi 4 でのみ正しく動作します(Delphi 3 または Delphi 2 では動作しません)。

Latest update of this entry: 2001-06-16
本家 The Delphi Bug List のエントリーはこちら
The Delphi Bug List 日本語訳 へ