Rational Developer for System z
PL/I for Windows, Version 8.0, プログラミング・ガイド

受け渡されるデータの内容

PL/I と C ルーチンは、同等のデータ型のデータを受け渡し、戻すことによって、「通信」します。PL/I と非 PL/I ルーチンは、外部静的変数を使用して通信することは できません。PL/I と C 間で同等のスカラー・データ型 を表 31 にリストします。

表 31. C と PL/I 間で同等のデータ型
C データ型 PL/I データ型
signed char FIXED BIN(7,0)
unsigned char UNSIGNED FIXED BIN(8,0) または CHAR(1)
signed short FIXED BIN(15,0)
unsigned short UNSIGNED FIXED BIN(16,0)
signed (long) int FIXED BIN(31,0)
unsigned (long) int UNSIGNED FIXED BIN(31,0)
float FLOAT BIN(21)FLOAT DEC(6)
double FLOAT BIN(53)FLOAT DEC(16)
long double FLOAT BIN(64) FLOAT DEC 18)
enum ORDINAL
<non-function-type> * POINTER または HANDLE
<function-type> * ENTRY LIMITED

表の最後の行に示したように、入り口変数が LIMITED でない場合、C 関数ポインターは PL/I 入り口変数と同等ではありません。この間違いによって引き起こされるエラーは、検出が困難です。

次元数が同じで、下限と上限が同じ場合、同等タイプの配列は同等です。 C では、下限を指定することはできません。 また、実際の上限は、指定した数より 1 つ少ない数になります。 例えば、C で宣言された次の配列を考えてみます。

  short x [ 6 ];

PL/I では、この配列は次のように宣言されます。

  dcl x(0:5) fixed bin(15);

同等タイプの構造体および共用体も、それらのエレメントが同じオフセットにマップされる場合は、同等です。エレメント間に埋め込みがない場合は、オフセットは同じものになります。構造体 (または共用体) の エレメントがすべて UNALIGNED の場合、PL/I は埋め込みを使用しません。ALIGNED のエレメントがある場合は、AGGREGATE リストを調べて、埋め込みがあるかどうかを判別することができます。 PL/I はストリングをスカラーとみなしますが、C はそのようにみなしません。したがって、これまでの説明はストリングには適用できません。

以下に示すように、C ビット・フィールドと PL/I ビット・ストリングはあまり似ていません。

厳密には、C には、文字ストリングはありません。あるのは、文字に対するポインターのみです。 ただし、一般的な使用法では、C ストリングは、最後の値が X'00' である文字のシーケンスになります。 したがって、以下の例では、address は、最大 30 個の非ヌル文字 を保持できる C 「ストリング」です。

  char address [ 31 ];

次の PL/I 宣言が、C 「ストリング」に一番似ています。

  dcl address char(30) varyingz;

C 関数の宣言では、ストリングは、通常、char* として宣言されます。 例えば、C ライブラリー関数 strcspn は、次のように宣言できます。

  int strcspn( char * string1, char * string2 );

同じ関数の PL/I 宣言は次のようになります。

  dcl strcspn entry( char(*) varyingz,
                     char(*) varyingz )
              returns( fixed bin(31) );

上記の例では、C と PL/I の宣言はどちらも不完全です。完全なバージョンについては、この章の最後の方で説明します。


Terms of use | Feedback

This information center is powered by Eclipse technology. (http://www.eclipse.org)