CALL 文および呼び出しプロトタイプにより可能なポインター変更

制限事項: 本トピックは UNIX 環境にのみ該当します。

この例では、デモンストレーション ファイル demo2.cbl を使用します。

  1. 中間コード ファイルを作成します。
    cobol demo2.cbl /anim /nognt;
    この例には、ライブラリ ルーチン CBL_ALLOC_MEM または CBL_FREE_MEM の呼び出しが含まれています。呼び出しプロトタイプはなく、これらのルーチンに提供される任意のポインターが実質的に英数字に再定義されます。
  2. 次のコマンドを入力して、このプログラムで Scan64 を実行します。
    cblscan64 demo2
    これにより次のレポートが生成されます。
    Processing file 'demo2.int'
    **Possible unsafe modification of pointer in a 'BY REFERENCE' parameter
    **in CALL 'CBL_ALLOC_MEM' statement at (file: demo2.cbl, line: 8)
      Pointer : PTR (file: demo2.cbl, def: 5)
    **Possible unsafe reference of pointer in a 'BY VALUE' parameter
    **in CALL 'CBL_FREE_MEM' statement at (file: demo2.cbl, line: 11)
      Pointer : PTR (file: demo2.cbl, def: 5)
      Finished file 'demo1.int' - pointer problems could exist
  3. ただし、CBL_ALLOC_MEM と CBL_FREE_MEM の各 API を定義するプロトタイプ ファイル demoproto.cpy を Scan64 が必ず使用するように指定できます。
    cblscan64 -t demoproto.cpy demo2
    これにより次のレポートが生成されます。
    Processing file 'demo2.int'
    Finished file 'demo2.int' - pointer usage is OK
この場合、メッセージは何も生成されません。これは、CBL_ALLOC_MEM と CBL_FREE_MEM がポインターを渡されることを想定しておりこれらが固定サイズの英数字として扱われても安全であると、Scan64 が認識しているためです。