Pacal再入門:Resultの扱い

 Pacal再入門:「ファイル存在の確認」を分割したコード - MuhのFreeBSD日記で、関数の戻り値を一時的に保存しておく為の'result'を変数として宣言すると、Lazarusで識別子'result'がダブっていると怒られる謎について書いたら、有り難い事にコメントを頂いた。

戻り値を返すための特別な識別子として `Result` 変数があるため、varで再宣言するとエラーになっているのだと思います。
FPCとDelphiでは、Result変数はvarで宣言無しでも使えます。 

  試してみた結果。

 resultを変数宣言を削除、Lazarusの環境下でコンパイル

 結果ご指摘頂いたとおり、エラーはでなかった。

 しかしながら、同じソースをLazarusを使わずコマンドラインからコンパイルした場合、Identifier not found "Result" と、またもや叱られる結果となった。

 Delphiでは試していない。コマンドラインから使用したコンパイラは、'\lazarus\fpc\3.0.4\bin\x86_64-win64\fpc.exe'。

 気になってにググってみたら、以下のようなスレッドを見つけた。

 Identifier not found "result" for Free Pascal Compiler version 2.6.4 [2014/02/26

 即ち、コマンドラインからfpc.exeでコンパイルして、Lazarusと同様の結果を得る為には、コマンドラインに'-MObjFPC'オプションをつける。もしくは、ソースにディレクティブとして、{$mode objfpc}を追加すれば良いらしい。

 ディレクティブの方を試してみたところ、コマンドモードの方でも変数宣言なしでコンパイルする事ができた。

 識別子'Result'が変数宣言なしに使えるという事自体に、たいしたメリットはない。

 互換性の問題は今後も発生するかもしれないが、それはその時対応すればよいという事で、ResultをRsultValueに変更する事で、互換性の問題については、とりあえずの回避する事にする。

 ... 更に気になって、調べて見たら、

 -Mobjfpc FPC mode with Object Pascal support との事。

 つまり、fpcはオプションなしでコンパイルした場合、プレーンなPascalとしてコンパイルされ、-Mobjfpc オプションをつけてコンパイルするとObject Pascalとしてコンパイルされる。

 Resultの問題は、PascalとObject Pascalの言語仕様の違いとして捉えるべきらしい。