プログラムでのポインターの使用

プログラムでポインターを使用する場合は、ポインターが再定義や部分参照されていないことを確認する必要があります。また、64 ビット環境ではポインターのサイズが 4 バイトから 8 バイトに増えるため、レコード定義にポインターのサイズに関する仮定を含めないようにしてください。

通常であれば実行時にしか見つからないような潜在的な問題を軽減するために、マルチプログラム アプリケーションでは呼び出しプロトタイプを使用することを検討してください。これにより、コンパイル時に各 CALL 文が正しいかどうかを検証し、呼び出し先のプログラムで想定しているポインターのサイズ (たとえば 64 ビットの 8 バイトのポインター) と実際に受け取るポインターのサイズ (32 ビットの 4 バイトのポインター) が異なる場合などに、その状況を特定することができます。この機能を使用するように既存のプログラムを変換する方法の詳細については、「呼び出しプロトタイプ」を参照してください。

ヒント: Micro Focus のライブラリ ルーチンを使用している場合は、システムに付属の cbltypes.cpy および cblproto.cpy コピー ファイルを使用して、それらの呼び出しの呼び出しプロトタイプを簡単に実装できます。

プログラムの中でデータ型 POINTER の無効な操作を探すには、コード分析ツールの 64 ビット対応のルール セットを使用すると便利です。これは、IDE またはコマンド ラインから実行できます。

また、グループの長さに関する仮定にも注意する必要があります。それらを Micro Focus のライブラリ ルーチンとの間でやりとりされる情報で使用する場合は特に注意が必要です。グループ内には、32 ビットと 64 ビットでサイズが異なるフィールドが含まれていることがあります。たとえば、CBL_GET_PROGRAM_INFO のパラメーター ブロック cblt-prog-info-params には、32 ビットのコンパイルと 64 ビットのコンパイルでサイズが異なる長さフィールド (cblte-gpi-size) が含まれています。そのようなグループを使用する場合は、条件付きコンパイル (「シングル ソーシング」を参照) を使用するか、length of 構文を使用してください。

ポインターを RETURN-CODE 特殊レジスタでも使用している場合は、特殊レジスタにポインターを配置したときに戻りコードのサイズとポインターのサイズが一致するようにする必要があります。これを行うには、RTNCODE-SIZE コンパイラ指令を使用します。デフォルトでは RTNCODE-SIZE"4" になっているため、64 ビット プログラムに対しては RTNCODE-SIZE"8" に設定します。