データ型の互換性
高水準言語は、それぞれさまざまなデータ型を持っています。 複数の言語で作成されているプログラム間でデータを受け渡す場合は、それらの違いについて熟知している必要があります。
ILE C プログラミング言語の一部のデータ型は、他の言語に直接相当するものがありません。 しかし、ILE C データ型を使用する他の言語で、データ型をシミュレートすることができます。
ILE C データ型と ILE RPG との互換性について、次の表で説明します。
プロトタイプでの 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 より大きい場合、構造体の最初のエレメントは unsigned 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 より大きい場合、構造体の最初のエレメントは unsigned 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 より大きい場合、構造体の最初のエレメントは unsigned 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 C データ型と ILE COBOL との互換性について、次の表で説明します。
プロトタイプでの 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. |
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 | 2 バイトの符号付き整数。範囲は -9999 から +9999 まで。 |
short int | PIC S9(4) BINARY | 2 | 2 バイトの符号付き整数。範囲は -9999 から +9999 まで。 |
int | PIC S9(9) COMP-4 | 4 | 4 バイトの符号付き整数。範囲は -999999999 から +999999999 まで。 |
int | PIC S9(9) BINARY | 4 | 4 バイトの符号付き整数。範囲は -999999999 から +999999999 まで。 |
int | USAGE IS INDEX | 4 | 4 バイト整数 |
long int | PIC S9(9) COMP-4 | 4 | 4 バイトの符号付き整数。範囲は -999999999 から +999999999 まで。 |
long int | PIC S9(9) BINARY | 4 | 4 バイトの符号付き整数。範囲は -999999999 から +999999999 まで。 |
struct {unsigned int : n}x; | PIC 9(9) COMP-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 record |
n | 構造体。この構造体には _Packed 修飾子を使用します。 構造体の内容を変更する場合、受け渡す構造体はポインターとして構造体に渡す必要があります。 |
関数へのポインター | PROCEDURE-POINTER | 16 | プロシージャーへのポインター (16 バイト) |
サポートされません。 | PIC S9(18) COMP-4 | 8 | 8 バイト整数 |
サポートされません。 | PIC S9(18) BINARY | 8 | 8 バイト整数 |
ILE C データ型と ILE CL との互換性について、次の表で説明します。
プロトタイプでの 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 | 構造体。この構造体には _Packed 修飾子を使用します。 |
関数へのポインター | サポートされません。 | 16 | 16 バイトのポインター |
ILE C データ型と OPM RPG/400® との互換性について、次の表で説明します。
プロトタイプでの ILE C 宣言 | OPM RPG/400 I 仕様、DS サブフィールド列の仕様 | 長さ | コメント |
---|---|---|---|
char[n] |
1 10 | n | 文字の配列 (n は、1 から 32766 まで)。 |
char | *INxxxx | 1 | *IN で始まる変数である標識。 |
char[n] | 1 nd (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 | 2 バイトの符号付き整数。範囲は -9999 から +9999 まで。 |
int | B 1 40 | 4 | 4 バイトの符号付き整数。範囲は -999999999 から +999999999 まで。 |
long int | B 1 40 | 4 | 4 バイトの符号付き整数。範囲は -999999999 から +999999999 まで。 |
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 | 構造体。この構造体には _Packed 修飾子を使用します。 |
関数へのポインター | サポートされません。 | 16 | 16 バイトのポインター |
ILE C データ型と OPM COBOL/400 との互換性について、次の表で説明します。
プロトタイプでの 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. |
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 | 4 バイトの符号付き整数。範囲は -999999999 から +999999999 まで。 |
long int | PIC S9(9) COMP-4 | 4 | 4 バイトの符号付き整数。範囲は -999999999 から +999999999 まで。 |
struct {unsigned int : n}x; | PIC 9(9) COMP-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 | 構造体。この構造体には _Packed 修飾子を使用します。 構造体の内容を変更する場合、受け渡す構造体はポインターとして構造体に渡す必要があります。 |
関数へのポインター | サポートされません。 | 16 | 16 バイトのポインター |
サポートされません。 | PIC S9(18) COMP-4 | 8 | 8 バイト整数 |
ILE C データ型と CL との互換性について、次の表で説明します。
プロトタイプでの 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 | 構造体。この構造体には _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 プログラムへ渡されるときは、ヌル終了にはなりません。 このような引数を制御言語プログラムから受け取る C プログラムでは、ストリングがヌル終了することは見込めません。 QCMDEXC を使用すれば、すべての引数をヌル終了させることができます。
コンパイル済みの制御言語プログラムから 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 定数を渡します。 ILE C プログラムを呼び出すために、コマンド作成 (CRTCMD) コマンドを使用して独自の CL コマンドを作成する場合は、ILE C プログラムをコマンド処理プログラムとして定義します。
コンパイル済みの制御言語プログラムから 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') | 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 バイト) として受け渡されます。