Delphiでは書き換えできる定数を使用できます。
次のコードは定数を書き換えています。
このコードはコンパイルエラーになります。
procedure F;
const
foo: Integer = 0;
begin
foo := foo + 1; //[dcc32 エラー] Project1.dpr(13): E2064 代入できない左辺値です
WriteLn(foo);
end;
コンパイラ司令「{$J+}」または「{$WRITEABLECONST ON}」を使用すると、変更可能な定数になります。
procedure F;
const
{$WRITEABLECONST ON}
foo: Integer = 0;
{$WRITEABLECONST OFF}
begin
foo := foo + 1;
WriteLn(foo);
end;
サンプルアプリケーションとして、次のようなコンソールアプリケーションを作成します。
program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils;
procedure F;
const
{$WRITEABLECONST ON}
foo: Integer = 0;
{$WRITEABLECONST OFF}
begin
foo := foo + 1;
WriteLn(foo);
end;
begin
F;
F;
F;
end.
実行結果は次のようになります。
1
2
3