8

Delphi 2007 とすべてのパッチとアップデートを使用しています。

2 つの異なるプロジェクトで使用されるファイルがあります。そのファイルには手順があり、次のように簡略化します。

procedure MyProcedure;
const
  UniqueValue: integer = 0;
begin
  //some code
  Inc(UniqueValue);
  //some more code
end;

定数に割り当てることができないため、Inc() コマンドは失敗するはずです。あるプロジェクトでは、その旨のエラーが表示されます (そのプロジェクトを「Accurate」と呼びます)。他のプロジェクトでは、エラーは発生しません (「偽物」と呼びます)。また、警告も表示されません。コンパイラがこの不正なコードを通過させる理由がわかりません。

プロジェクトBogusで試したことは次のとおりです。

1 - 行の途中で「slkdjflskdjf」と入力するなど、明らかなエラーを導入する

結果: エラーが表示されます。これは、このファイルを実際にコンパイルしようとしていることを示しています。

2 - .DCU を削除し、プロジェクトを再構築します

結果: .DCU が再生成され、プロジェクトがこの誤ったコードを本当にコンパイルしていることを再度証明します。

なぜこの動作が発生するのかについて考えている人はいますか? より具体的には、なぜあるプロジェクトでは発生し、別のプロジェクトでは発生しないのでしょうか? 定数への割り当てを許可するあいまいなコンパイラ オプションはありますか?

最後に 1 つ: どちらのプロジェクトも Delphi 5 から変換されています。Delphi 5 で同様のコードを使用すると、どちらも正常にコンパイルされます。

編集:ご協力ありがとうございます。割り当て可能な型付き定数ディレクティブを変更した後、両方のプロジェクトで一貫した動作を得ることができます。今日、新しいことを学びました...

4

4 に答える 4

14

これには、コンパイラ オプションに「割り当て可能な型付き定数」というオプションがあります。コードで「{$J+}」を使用して有効にすることもできます。

于 2009-04-24T15:53:30.440 に答える
5

これらのプロジェクトでは、$J コンパイラ ディレクティブの設定が異なるのではないでしょうか?

于 2009-04-24T15:52:38.993 に答える
4

プロジェクトオプションのセクションコンパイラをチェックして、違いを見つけることができるかどうかを確認することをお勧めします。たぶん、偽のプロジェクトで有効になっている割り当て可能な型付き定数のオプションがあります。

于 2009-04-24T15:58:10.447 に答える
3

他の人が言っているように、それはほぼ確実に{$J+}指令です。

差分ツールを使用している場合は、プロジェクトファイルを比較して、それらがどのように異なるか(単なるテキストファイル)を確認して、将来同様の問題を解決できます。

于 2009-04-24T15:55:39.920 に答える