データ・タイプの互換性
高水準言語は、それぞれさまざまなデータ型を持っています。 複数の言語で作成されているプログラム間でデータを受け渡す場合は、それらの違いについて熟知している必要があります。
ILE C プログラミング言語の一部のデータ・タイプには、他の言語と直接的に対応するものがありません。 ただし、 ILE C データ・タイプを使用する他の言語でデータ・タイプをシミュレートすることができます。
以下の表は、ILE RPG との ILE C データ・タイプの互換性を示しています。
| プロトタイプでの ILE C 宣言 | フリー・フォーム ILE RPG 構文 | ILE RPG D 仕様、列 33 から 39 まで | 長さ | コメント |
|---|---|---|---|---|
char [n]
文字 * |
|
|
n | 文字の配列 (n は、1 から 16773104 まで)。 ヌル終了ストリング・パラメーターの場合には、VALUE および OPTIONS(*STRING) キーワードを使用して、プロトタイプ化されたパラメーターをポインターとしてコード化します。 |
| char | |
|
1 | 標識。 |
| char[n] | |
|
n | ゾーン 10 進数。 |
| _Packed struct {unsigned short i; char[n]} | |
|
n+2 | 可変長フィールド (i は指定した長さ、n は最大長)。 注: n が 65535 より大きい場合は、構造体の最初のエレメントは符号なし int であり、長さは n+4 です。 |
| _Packed struct {unsigned int i; char[n]} | |
|
n+4 | 可変長フィールド (i は指定した長さ、n は最大長)。 |
| wchar_t[n] | |
|
2n | UCS-2 文字の配列。 注: RPG UCS-2 タイプでは、CCSID(1200) を指定することで UTF-16 データもサポートされます。 |
| _Packed struct {unsigned short i; wchar_t[n]} | |
|
2n+2 | 可変長 UCS-2 フィールド (i は指定した長さ、n は最大長)。 注: n が 65535 より大きい場合は、構造体の最初のエレメントは符号なし int であり、長さは 2n+4 です。 注: RPG UCS-2 タイプでは、CCSID(1200) を指定することで UTF-16 データもサポートされます。 |
| _Packed struct {unsigned int i; wchar_t[n]} | |
|
2n+4 | 可変長 UCS-2 フィールド (i は指定した長さ、n は最大長)。 注: RPG UCS-2 タイプでは、CCSID(1200) を指定することで UTF-16 データもサポートされます。 |
| wchar_t[n] | |
|
2n | グラフィック文字の配列。 |
| _Packed struct {unsigned short i; wchar_t[n]} | |
|
2n+2 | 可変長グラフィック・フィールド。i は指定した長さで、n は最大長です。 注: n が 65535 より大きい場合は、構造体の最初のエレメントは符号なし int であり、長さは 2n+4 です。 |
| _Packed struct {unsigned int i; wchar_t[n]} | |
|
2n+4 | 可変長グラフィック・フィールド。i は指定した長さで、n は最大長です。 |
| char[n] | |
|
8, 10 | 日付フィールド。 |
| char[n] | |
|
8 | 時刻フィールド。 |
| char[n] | |
|
20-32 | タイム・スタンプ・フィールド |
| short int | |
|
2 | 整数フィールド |
| short unsigned int | |
|
2 | 符号なし整数フィールド |
| int | |
|
4 | 整数フィールド |
| unsigned int | |
|
4 | 符号なし整数フィールド |
| long int | |
|
4 | 整数フィールド |
| long unsigned int | |
|
4 | 符号なし整数フィールド |
| long long int | |
|
8 | 8 バイトの整数フィールド。 |
| long long unsigned int | |
|
8 | 8 バイトの符号なし整数フィールド。 |
| struct {unsigned int : n}x; | サポートなし。 | サポートなし。 | 4 | 4 バイトの符号なし整数。ビット・フィールド。 |
| float | FLOAT(4) | 4F | 4 | 4 バイトの浮動小数点 |
| double | FLOAT(8) | 8F | 8 | 8 バイトの double 型 |
| long double | FLOAT(8) | 8F | 8 | 8 バイトの long double。 |
| _Decimal32 | サポートされていません | サポートされていません | 4 | 4 バイトの 10 進浮動小数点 |
| _Decimal64 | サポートされていません | サポートされていません | 8 | 8 バイトの 10 進浮動小数点。 |
| _Decimal128 | サポートされていません | サポートされていません | 16 | 16 バイトの 10 進浮動小数点 |
| enum | INT(p) | pI | 1、2、4 | 列挙型 n = 1,2,4: p = 3,5,10 enum 値を使用して ILE RPG 名前付き定数を定義します。 |
| * | |
|
16 | ポインター。 |
| decimal(n,p) | |
|
n/2+1 | パック 10 進数。 n は、必ず 30 以下。 |
| union.element | キーワード POS(1) | キーワード OVERLAY (データ構造名) を持つ <type> | エレメントの長さ | 共用体のエレメント。 |
| data_type[n] | キーワード DIM(n) を持つ <type> | キーワード DIM(n) を持つ <type> | 16 | C がポインターを渡す先の配列 |
| struct | データ構造 | データ構造 | n | 構造体。 RPG データ構造体に ALIGN キーワードがない場合は、構造体で _Packed 修飾子を使用します。 C 構造体に _Packed 修飾子がない場合は、RPG データ構造体で ALIGN キーワードを使用します。 |
| 関数を指すポインター。 | |
キーワード PROCPTR 付き |
16 | 16 バイトのポインター |
以下の表は、ILE COBOL との ILE C データ・タイプの互換性を示しています。
| プロトタイプでの ILE C 宣言 | ILE COBOL の LINKAGE SECTION | 長さ | コメント |
|---|---|---|---|
char [n]
文字 * |
PIC X(n). | n | 文字の配列 (n は、1 から 3,000,000 まで)。 |
| char | PIC 1 INDIC .. | 1 | 標識。 |
| char[n] | PIC S9(n) DISPLAY | n | ゾーン 10 進数。 |
| wchar_t[n] | PIC G(n) | 2n | グラフィック・データ型 |
| _Packed struct {short i; char[n]} | 05 VL-FIELD。
10 i PIC S9(4) COMP-4。 10 data PIC X(n). |
n+2 | 可変長フィールド (i は指定した長さ、n は最大長)。 |
| char[n] | PIC X(n). | 6 | 日付フィールド。 |
| char[n] | PIC X(n). | 5 | 日フィールド |
| char | PIC X. | 1 | 曜日フィールド |
| char[n] | PIC X(n). | 8 | 時刻フィールド。 |
| char[n] | PIC X(n). | 26 | タイム・スタンプ・フィールド |
| short int | PIC S9(4) COMP-4 | 2 | -9999~+9999 の 2 バイト符号付き整数。 |
| short int | PIC S9(4) BINARY | 2 | -9999~+9999 の 2 バイト符号付き整数。 |
| int | PIC S9(9) COMP-4 | 4 | -999999999~+999999999 の 4 バイト符号付き整数。 |
| int | PIC S9(9) BINARY. | 4 | -999999999~+999999999 の 4 バイト符号付き整数。 |
| int | USAGE IS INDEX | 4 | 4 バイトの整数。 |
| long int | PIC S9(9) COMP-4 | 4 | -999999999~+999999999 の 4 バイト符号付き整数。 |
| long int | PIC S9(9) BINARY. | 4 | -999999999~+999999999 の 4 バイト符号付き整数。 |
| struct {unsigned int : n}x; | PIC 9(9) COMP-4
PIC X(4) |
4 | ビット・フィールドは 16 進数リテラルを使用して操作可能。 |
| float | USAGE IS COMP-1 | 4 | 4 バイトの浮動小数点 |
| double | USAGE IS COMP-2 | 8 | 8 バイトの double 型 |
| long double | サポートなし。 | 8 | 8 バイトの long double。 |
| enum | サポートなし。 | 1、2、4 | 列挙型 |
| * | USAGE IS POINTER | 16 | ポインター。 |
| decimal(n,p) | PIC S9(n-p)V9(p) COMP-3 | n/2+1 | パック 10 進数。 |
| decimal(n,p) | PIC S9(n-p) 9(p) PACKED-DECIMAL | n/2+1 | パック 10 進数。 |
| union.element | REDEFINES | エレメントの長さ | 共用体のエレメント。 |
| data_type[n] | OCCURS | 16 | C がポインターを渡す先の配列 |
| struct | 01 レコード
05 field1 05 field2 |
n | 構造体。 struct に _Packed 修飾子を使用。 構造体の内容を変更する場合、渡す構造は、構造体を指すポインターとして渡すことが必要。 |
| 関数を指すポインター。 | PROCEDURE-POINTER | 16 | プロシージャーへのポインター (16 バイト) |
| サポートなし。 | PIC S9(18) COMP-4 | 8 | 8 バイト整数 |
| サポートなし。 | PIC S9(18) BINARY | 8 | 8 バイト整数 |
以下の表は、ILE CL との ILE C データ・タイプの互換性を示しています。
| プロトタイプでの ILE C 宣言 | CL | 長さ | コメント |
|---|---|---|---|
char [n]
文字 * |
*CHAR LEN(&N) | n | 文字の配列 (n は、1 から 32766 まで)。 ヌル終了ストリング。 例: CHGVAR &V1 VALUE (&V *TCAT X'00')。&V1 は、&V より 1 バイトだけ大きな値になります。 |
| char | *LGL | 1 | '1' または '0' を入れる。 |
| _Packed struct {short i; char[n]} | サポートなし。 | n+2 | 可変長フィールド (i は指定した長さ、n は最大長)。 |
| 整数型 | *INT LEN(&N) | 2, 4, 8 | 2、4、または 8 バイトの符号付き整数。 (CL では、1 バイトの整数タイプはサポートされません) |
| *UINT LEN(&N) | 2, 4, 8 | 2、4、または 8 バイトの符号なし整数。 (CL では、1 バイトの整数タイプはサポートされません) | |
| 浮動小数点定数 | CL 定数のみ | 4 | 4 バイトまたは 8 バイトの浮動小数点 |
| decimal(n,p) | *DEC | n/2+1 | パック 10 進数。 n の限度は 15。p の限度は 9。 |
| union.element | サポートなし。 | エレメントの長さ | 共用体のエレメント。 |
| struct | サポートなし。 | n | 構造体。 struct に _Packed 修飾子を使用。 |
| 関数を指すポインター。 | サポートなし。 | 16 | 16 バイトのポインター |
次の表は、OPM RPG/400®との ILE C データ・タイプの互換性を示しています。
| プロトタイプでの ILE C 宣言 | OPM RPG/400 I 仕様、DS サブフィールド列仕様 | 長さ | コメント |
|---|---|---|---|
char [n]
文字 * |
1 10 | n | 文字の配列 (n は、1 から 32766 まで)。 |
| char | *INxxxx | 1 | *IN で始まる変数である標識。 |
| char[n] | 1 番目 (d>=0) | n | ゾーン 10 進数。 n の限度は 30。 |
| _Packed struct {unsigned short i; char[n]} | サポートなし。 | n+2 | 可変長フィールド (i は指定した長さ、n は最大長)。 |
| _Packed struct {unsigned int i; char[n]} | サポートなし。 | n+4 | 可変長フィールド (i は指定した長さ、n は最大長)。 |
| wchar_t[n] | サポートなし。 | 2n | UCS-2 文字の配列。 |
| _Packed struct {unsigned short i; wchar_t[n]} | サポートなし。 | 2n+2 | 可変長 UCS-2 フィールド (i は指定した長さ、n は最大長)。 |
| _Packed struct {unsigned int i; wchar_t[n]} | サポートなし。 | 2n+4 | 可変長 UCS-2 フィールド (i は指定した長さ、n は最大長)。 |
| wchar_t[n] | サポートなし。 | 2n | グラフィック文字の配列。 |
| _Packed struct {unsigned short i; wchar_t[n]} | サポートなし。 | 2n+2 | 可変長グラフィック・フィールド。i は指定した長さで、n は最大長です。 |
| _Packed struct {unsigned int i; wchar_t[n]} | サポートなし。 | 2n+4 | 可変長グラフィック・フィールド。i は指定した長さで、n は最大長です。 |
| char[n] | サポートなし。 | 6, 8, 10 | 日付フィールド。 |
| char[n] | サポートなし。 | 8 | 時刻フィールド。 |
| char[n] | サポートなし。 | 26 | タイム・スタンプ・フィールド |
| short int | B 1 20 | 2 | -9999~+9999 の 2 バイト符号付き整数。 |
| int | B 1 40 | 4 | -999999999~+999999999 の 4 バイト符号付き整数。 |
| long int | B 1 40 | 4 | -999999999~+999999999 の 4 バイト符号付き整数。 |
| long long int | サポートなし。 | 8 | 8 バイトの整数フィールド。 |
| struct {unsigned int : n}x; | サポートなし。 | 4 | 4 バイトの符号なし整数。ビット・フィールド。 |
| float | サポートなし。 | 4 | 4 バイトの浮動小数点 |
| double | サポートなし。 | 8 | 8 バイトの double 型 |
| long double | サポートなし。 | 8 | 8 バイトの long double。 |
| _Decimal32 | サポートなし。 | 4 | 4 バイトの 10 進浮動小数点 |
| _Decimal64 | サポートなし。 | 8 | 8 バイトの 10 進浮動小数点。 |
| _Decimal128 | サポートなし。 | 16 | 16 バイトの 10 進浮動小数点 |
| enum | サポートなし。 | 1、2、4 | 列挙型 |
| * | サポートなし。 | 16 | ポインター。 |
| decimal(n,p) | P 1 n/2+1d | n/2+1 | パック 10 進数。 n は、必ず 30 以下。 |
| union.element | 位置 1 で開始されるデータ構造体サブフィールド | エレメントの長さ | 共用体のエレメント。 |
| data_type[n] | E-SPEC 配列 | 16 | C がポインターを渡す先の配列 |
| struct | データ構造 | n | 構造体。 struct に _Packed 修飾子を使用。 |
| 関数を指すポインター。 | サポートなし。 | 16 | 16 バイトのポインター |
次の表は、OPM COBOL/400との ILE C データ・タイプの互換性を示しています。
| プロトタイプでの ILE C 宣言 | OPM COBOL の LINKAGE SECTION | 長さ | コメント |
|---|---|---|---|
char [n]
文字 * |
PIC X(n). | n | 文字の配列 (n は、1 から 3,000,000 まで)。 |
| char | PIC 1 INDIC .. | 1 | 標識。 |
| char[n] | PIC S9(n) USAGE IS DISPLAY | n | ゾーン 10 進数。 n の限度は 18。 |
| _Packed struct {short i; char[n]} | 05 VL-FIELD。
10 i PIC S9(4) COMP-4。 10 data PIC X(n). |
n+2 | 可変長フィールド (i は指定した長さ、n は最大長)。 |
| char[n] | PIC X(n). | 6, 8, 10 | 日付フィールド。 |
| char[n] | PIC X(n). | 8 | 時刻フィールド。 |
| char[n] | PIC X(n). | 26 | タイム・スタンプ・フィールド |
| short int | PIC S9(4) COMP-4 | 2 | 2 バイトの符号付き整数。範囲は -9999 から +9999 まで。 |
| int | PIC S9(9) COMP-4 | 4 | -999999999~+999999999 の 4 バイト符号付き整数。 |
| long int | PIC S9(9) COMP-4 | 4 | -999999999~+999999999 の 4 バイト符号付き整数。 |
| struct {unsigned int : n}x; | PIC 9(9) COMP-4
PIC X(4) |
4 | ビット・フィールドは 16 進数リテラルを使用して操作可能。 |
| float | サポートなし。 | 4 | 4 バイトの浮動小数点 |
| double | サポートなし。 | 8 | 8 バイトの double 型 |
| long double | サポートなし。 | 8 | 8 バイトの long double。 |
| enum | サポートなし。 | 1、2、4 | 列挙型 |
| * | USAGE IS POINTER | 16 | ポインター。 |
| decimal(n,p) | PIC S9(n-p)V9(p) COMP-3 | n/2+1 | パック 10 進数。 n と p の限度は 18。 |
| union.element | REDEFINES | エレメントの長さ | 共用体のエレメント。 |
| data_type[n] | OCCURS | 16 | C がポインターを渡す先の配列 |
| struct | 01 record | n | 構造体。 struct に _Packed 修飾子を使用。 構造体の内容を変更する場合、渡す構造は、構造体を指すポインターとして渡すことが必要。 |
| 関数を指すポインター。 | サポートなし。 | 16 | 16 バイトのポインター |
| サポートなし。 | PIC S9(18) COMP-4 | 8 | 8 バイト整数 |
以下の表は、CL との ILE C データ型の互換性を示しています。
| プロトタイプでの ILE C 宣言 | CL | 長さ | コメント |
|---|---|---|---|
char [n]
文字 * |
*CHAR LEN(&N) | n | 文字の配列 (n は、1 から 32766 まで)。 ヌル終了ストリング。 例: CHGVAR &V1 VALUE (&V *TCAT X'00')。&V1 は、&V より 1 バイトだけ大きな値になります。 n の限度は 9999。 |
| char | *LGL | 1 | '1' または '0' を入れる。 |
| _Packed struct {short i; char[n]} | サポートなし。 | n+2 | 可変長フィールド (i は指定した長さ、n は最大長)。 |
| 整数型 | *INT LEN(&N) | 2, 4 | 2 または 4 バイトの符号付き整数。 (CL では、1 バイトの整数タイプはサポートされません) |
| *UINT LEN(&N) | 2, 4 | 2 または 4 バイトの符号なし整数。 (CL では、1 バイトの整数タイプはサポートされません) | |
| 浮動小数点定数 | CL 定数のみ | 4 | 4 バイトまたは 8 バイトの浮動小数点 |
| decimal(n,p) | *DEC | n/2+1 | パック 10 進数。 n の限度は 15。p の限度は 9。 |
| union.element | サポートなし。 | エレメントの長さ | 共用体のエレメント。 |
| struct | サポートなし。 | n | 構造体。 struct に _Packed 修飾子を使用。 |
| 関数を指すポインター。 | サポートなし。 | 16 | 16 バイトのポインター |
次の表は、コマンド行 CL 呼び出しから ILE C プログラムに引数を渡す方法を示しています。
| コマンド行の引数 | Argv 配列 | ILE C 引数 |
|---|---|---|
| argv[0] | "LIB/PGMNAME" | |
| argv[1..255] | 通常のパラメーター | |
| '123.4' | argv[1] | "123.4" |
| 123.4 | argv[2] | 0000000123.40000D |
| 'Hi' | argv[3] | "Hi" |
| Lo | argv[4] | "LO" |
CL 文字配列 (ストリング) は、 ILE C プログラムに渡されるときに NULL 終了になりません。 このような引数を制御言語プログラムから受け取る C プログラムでは、ストリングがヌル終了することは見込めません。 QCMDEXC を使用すれば、すべての引数をヌル終了させることができます。
次の表は、コンパイル済み CL プログラムから ILE C プログラムに CL 定数が渡される方法を示しています。
| 制御言語プログラム引数のコンパイル | Argv 配列 | ILE C 引数 |
|---|---|---|
| argv[0] | "LIB/PGMNAME" | |
| argv[1..255] | 通常のパラメーター | |
| '123.4' | argv[1] | "123.4" |
| 123.4 | argv[2] | 0000000123.40000D |
| 'Hi' | argv[3] | "Hi" |
| Lo | argv[4] | "LO" |
コマンド処理プログラム (CPP) は、 表 8に定義されている CL 定数を渡します。 コマンド作成 (CRTCMD) コマンドを使用して独自の CL コマンドを作成し、 ILE C プログラムを呼び出すときに、 ILE C プログラムをコマンド処理プログラムとして定義します。
次の表は、コンパイル済み CL プログラムから ILE C プログラムに CL 変数が渡される方法を示しています。 CL から C への引数の受け渡しは、すべて参照によって行われます。
| CL 変数 | ILE C 引数 |
|---|---|
| DCL VAR(&v) TYPE(*CHAR) LEN(10) VALUE('123.4') | 123.4 |
| DCL VAR(&d) TYPE(*DEC) LEN(10) VALUE(123.4) | 0000000123.40000D |
| DCL VAR(&h) TYPE(*CHAR) LEN(10) VALUE('Hi') | こんにちは |
| DCL VAR(&i) TYPE(*CHAR) LEN(10) VALUE(Lo) | LO |
| DCL VAR(&j) TYPE(*LGL) LEN(1) VALUE('1') | 1 |
CL 変数および数値定数は、ヌル終了ストリングを持つ ILE C プログラムには渡されません。 文字定数と論理リテラルは、ヌル終了ストリングとして受け渡されますが、ブランクで埋め込まれてはいません。 パック 10 進数などの数値制約は、15,5 (8 バイト) として受け渡されます。