DelphiでCのようなstatic変数を使う方法。

プログラミング言語Delphiで、C言語のようにstatic変数を使う方法。Pascalの流儀から言うと邪道とも言える方法なのだが、実用上は便利。

Delphi_static_01

static変数とは、スコープはローカルなのだが、プログラムの実行中にずっと値が保持されるという特殊な変数。都度呼ばれる関数が、自分の前世を何となく覚えているようなものかな?

C言語のstrtok関数とかをDelphiで実装しようとするときに必要になる。冒頭の画面のように、[プロジェクト]−[オプション]画面で[コンパイル]の[割り当て可能な型付き変数]をtrueにしておくと使えるようになる。そうでないとコンパイルエラーになって、しばらく悩むことになる(ブログ主のように)。

具体的なコードはこう(太字の部分だけ)。

function MBSTok( s1, s2 : PChar ) : PChar;
const
  BufPtr : PChar = nil;    { 文字列先頭を示すポインタ }

var
  p1, p2 : PChar;
  wc : Word;
begin
………
end;

constを付けると普通は定数になるが、PCharという型も指定して、nilで初期化してやれば、それはC言語でいうこんなコードになる。

static char *bufptr = NULL;

DelphiってPascalだからきめ細かいコード書けないよね?という御仁は、これが誤解だと思い知らせたい。というか、Delphiユーザをもっと増やしたい。ということで、たびたびこんな記事は投稿しようかな、と思う。

コメント