COBOL2002 ユーザーズガイド

[目次][用語][索引][前へ][次へ]

20.1.4 注意事項

C言語の構造体の場合,要素の境界調整でパディング(領域間のギャップを埋めるために挿入される暗黙のFILLER項目)が挿入されます。そのほかに,構造体のサイズを最大の基本要素サイズの倍数に切り上げるため,パディングが挿入されることがあります。この場合,パディングは構造体の末尾に挿入されます。例えば上記の例の構造体tblの場合,要素の合計のサイズはCOBOLの集団項目TBLと同じ14バイトですが,構造体のサイズを4バイト(最大の基本要素のサイズ)の倍数の16バイトにするために,2バイトのパディングが構造体の末尾に挿入されます。このため,COBOLの集団項目TBLとはサイズが不一致になります。プラットフォームによっては,このサイズの不一致が原因で,引数や戻り値の受け渡しで異常終了や結果不正となることがあるため,次のどちらかの方法でC言語の構造体のサイズとCOBOLの集団項目のサイズを一致させる必要があります。

C言語のシステム関数は,#defineによって実際の関数名とは別の関数名で宣言され,マクロ展開後に置き換えられることがあります。COBOLではC言語のマクロは展開しないため,COBOLプログラムからC言語のシステム関数をCALL文で直接呼び出すと,COBOLからマクロ展開前の関数名を呼び出し,予期せぬ不具合が発生するおそれがあります。

COBOLプログラムからC言語のシステム関数を呼び出す場合は,直接呼び出さないで,システム関数を呼び出すCプログラムを作成し,このCプログラムを呼び出すようにしてください。

注※
Microsoft C/C++の関数