Pascal 日和 ホームページ

更新:2024-10-13


Free Pascal (Object Pascal) メモについて



Object Pascal 言語として Free Pascal を使用するためのメモについて




 Free Pascal コンパイラのインストールやコンパイル方法について説明してきたので、それを前提とした環境で Free Pascal プログラミングについて簡単な説明と自分で必要があって調べたことなどメモとして記載していきます。仕様がどう定義されているかというより、実際にどう動くのかということを優先します。私の間違った解釈もあると思うので、あくまで参考程度に。


 実行環境は Microsoft Windows です(Windows 11 64bit)。Windows 以外のプラットフォームとの互換については考慮していません。


 Lazarus や CodeTyphon を使用すると、多くのコンポーネント(ビジュアル/非ビジュアル)が追加され、統合開発環境としてい利用できるので非常に便利で強力ですが、ここでは、Free Pascal の処理系とテキストエディタだけでプログラミングする場合のメモとします。



開発環境


 以下の環境が使用できることを前提にしています。


環境 内容 設定ページ
プラットフォーム Windows 10, Windows 11。64bitまたは32bit。
コマンドプロンプト Free Pascal のコンパイラは、コマンドラインプログラムなので、コマンドプロンプトやウインドウズターミナルの理解が必要です。
コマンドプロンプトを使用したことがない場合は、右記の設定ページを参照してください。
共通設定
コンパイル環境 Free Pascal のコンパイラのインストールと、コンパイル用のコマンドスクリプトなど。
右記の設定ページを参照してください。
デバッグ環境 (オプション) TDM-GCC の gdb を利用したデバッグ用のコマンドスクリプトなど。
dgb を利用しない場合は不要です。
テキストエディタ プログラムは普通のテキストファイルなので、好きなテキストやディタを用意してください。
ただし、コードページ(エンコーディング)として UTF-8 で編集・保存ができるものを使用してください。
わからない場合は、フリーソフトの PSPad を使ってみてください。右記の設定ページを参照してください。

 上記の範囲であれば、無償で用意できます(Windows ライセンスは除きます)。




Free Pascal のコンパイラモード


 Free Pascal は、複数の Pascal 言語(文法)モードを持っています。

 プログラミングするときにはどのモードで開発するかを決めます。

 モードには以下のものがあります。ここでは OBJFPC を前提として話を進めます。


モード 内容 当メモでのモード
FPC オリジナルの Free Pascal コンパイラモード。
OBJFPC FPC モードにクラス、インターフェース、例外処理を追加。
このモードを前提とする
TP Turbo Pascal の互換モード。
DELPHI Delphi互換モード。Delphi 7 以降。
DELPHIUNNICODE Delphi互換モード。Delphi 2009 以降。
MACPAS Mac Pascal 互換モード。
ISO 標準 Pascal、ISO 7185 モード。レベル 0 およびレベル 1。
ExtendedPascal 拡張 Pascal、ISO 10206 モード。レベル 0 およびレベル 1。

 ※ それぞれの互換モードは完全互換ではありません。


 コンパイラモードの指定は、コンパイラのコマンドラインで -M スイッチ で指定するか、ソースファイルの中で {$MODE} ディレクティブで指定します。

 ディレクティブとは、ソースファイルの中でコンパイラに対する特定の処理を指示をする機能です。


 コマンドラインスイッチで OBJFPC を指定する場合は以下になります。


>fpc64 -MOBJFPC Hello.pas


 ディレクティブで指定する場合は以下になります。


program Hello;

{$MODE OBJFPC}

uses
  SysUtils;

begin
  WriteLn(Output, '世界よ、こんにちは。')
end.


 コマンドラインスイッチとソースファイル中のディレクティブの両方を指定した場合、ソースファイル中のディレクティブが優先されます。




OBJFPC モードの文字列型の設定とソースファイルのコードページの設定


 文字列型 String は、OBJFPC モードでは既定で ShortString 型になります。長い文字列型の AnsiString 型にするには、コンパイラコマンドラインスイッチで -Sh を指定するか、ソースファイルのディレクティブで {$H+} を指定します。ここでは、String 型を長い文字列型 AnsiString として扱います。


 プログラムの中で String 型を使用した場合は、ディレクティブ(またはコンパイラスイッチ)により以下の文字列型が適用されます。


環境 内容 ディレクティブ
String 型 ShortString 型 (短い文字列 MAX 255バイト) 既定 または {$H-}
AnsiString 型 (長い文字 MAXは整数で表せる範囲のバイト数) {$H+}

 また、日本語のようなマルチバイト文字を扱う場合、ソースファイルを特定のコードページ(エンコーディング)で作成して、コンパイラにそのコードページでプログラムが書かれていることを伝えます。ここでは、UTF8 を使用します。コンパイラコマンドラインスイッチで -FcUTF8 を指定するか、ソースファイルのディレクティブで {$CODEPAGE UTF8} を指定します。


 テキストエディタでプログラムソースファイルを作成するときは、UTF8(UTF-8)で作成します。UTF8のBOM付きBOMなしは任意ですが、ここではBOMなしとします。


 以上の事から、基本的なディレクティブは以下の様に設定します。


program Hello;

{$MODE OBJFPC}{$H+}
{$CODEPAGE UTF8}

uses
  SysUtils;

begin
  WriteLn(Output, '世界よ、こんにちは。')
end.




PSPad エディタでソースファイルを UTF-8 で編集・保存する方法


 PSPad のステータスバーには、現在編集中のコードページ(エンコーディング)が表示されます。

 新規でファイルを作成すると、既定では「ANSI Japanese (932)」でファイルを作成します。

 既存のファイルを開いたときは、内容から判断して自動的に適切なコードページ(エンコーディング)を選択します(正しく判断できた場合)。




 ステータイバーのコードページ(エンコーディング)の部分をクリックするとコードページ(エンコーディング)の一覧が表示されます。





 一覧から、「Unicode UTF-8 no BOM (65001)」を選択します。





 ステータスバーの表示が「Unicode UTF-8 no BOM (65001)」になれば、編集中の内容も変更され、ファイルに保存すると「UTF-8」のファイルになります。


 [エンコード]メニューでも同じ事ができます。