データ型の互換性

高水準言語は、それぞれさまざまなデータ型を持っています。 複数の言語で作成されているプログラム間でデータを受け渡す場合は、それらの違いについて熟知している必要があります。

ILE C プログラミング言語の一部のデータ型は、他の言語に直接相当するものがありません。 しかし、ILE C データ型を使用する他の言語で、データ型をシミュレートすることができます。

ILE C データ型と ILE RPG との互換性について、次の表で説明します。

表 1. ILE C データ型と ILE RPG との互換性
プロトタイプでの ILE C 宣言 フリー・フォーム ILE RPG 構文 ILE RPG D 仕様、列 33 から 39 まで 長さ コメント

char[n]
char *

       CHAR(n)  
       nA  
n 文字の配列 (n は、1 から 16773104 まで)。

ヌル終了ストリング・パラメーターの場合には、VALUE および OPTIONS(*STRING) キーワードを使用して、プロトタイプ化されたパラメーターをポインターとしてコード化します。

char
       IND 
       1N 
1 標識。
char[n]
       ZONED(n)
       nS 0
n ゾーン 10 進数。
_Packed struct {unsigned short i; char[n]}
       VARCHAR(n)
       nA VARYING
n+2 可変長フィールド (i は予定の長さ、n は最大長)。

注: n が 65535 より大きい場合、構造体の最初のエレメントは unsigned int で、長さは n+4 です。

_Packed struct {unsigned int i; char[n]}
       VARCHAR(n : 4)
       nA VARYING(4)
n+4 可変長フィールド (i は予定の長さ、n は最大長)。
wchar_t[n]
       UCS2(n)
       nC
2n UCS-2 文字の配列。

注: RPG UCS-2 タイプは、CCSID(1200) を指定することで UTF-16 データもサポートします。

_Packed struct {unsigned short i; wchar_t[n]}
       VARUCS2(n)
       nC VARYING
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]}
       VARUCS2(n : 4)
       nC VARYING(4)
2n+4 可変長 UCS-2 フィールド (i は予定の長さ、n は最大長)。

注: RPG UCS-2 タイプは、CCSID(1200) を指定することで UTF-16 データもサポートします。

wchar_t[n]
       GRAPH(n)
       nG 
2n 図形文字の配列。
_Packed struct {unsigned short i; wchar_t[n]}
       VARGRAPH(n)
       nG VARYING
2n+2 可変長図形フィールド (i は予定の長さ、n は最大長)。

注: n が 65535 より大きい場合、構造体の最初のエレメントは unsigned int で、長さは 2n+4 です。

_Packed struct {unsigned int i; wchar_t[n]}
       VARGRAPH(n : 4)
       nG VARYING(4)
2n+4 可変長図形フィールド (i は予定の長さ、n は最大長)。
char[n]
        DATE
        D 
8, 10 日付フィールド
char[n]
        TIME 
        T 
8 時刻フィールド
char[n]
        TIMESTAMP 
        Z 
20-32 タイム・スタンプ・フィールド
short int
       INT(5)
       5I 0
2 整数フィールド
short unsigned int
       UNS(5)
       5U 0
2 符号なし整数フィールド
int
      INT(10)
      10I 0
4 整数フィールド
unsigned int
      UNS(10)
      10U 0
4 符号なし整数フィールド
long int
      INT(10)
      10I 0
4 整数フィールド
long unsigned int
      UNS(10)
      10U 0
4 符号なし整数フィールド
long long int
      INT(20)
      20I 0
8 8 バイトの整数フィールド
long long unsigned int
      UNS(20)
      20U 0
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 名前付き定数を定義します。

*
       POINTER
        * 
16 ポインター
decimal(n,p)
       PACKED(n:p)
       nP 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 キーワードを使用します。

関数へのポインター
        POINTER(*PROC)
        * 
キーワード PROCPTR 付き
16 16 バイトのポインター

ILE C データ型と ILE COBOL との互換性について、次の表で説明します。

表 2. ILE C データ型と ILE COBOL との互換性
プロトタイプでの ILE C 宣言 ILE COBOL の LINKAGE SECTION 長さ コメント

char[n]
char *

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 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
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 record
   05 field1
   05 field2

n 構造体。この構造体には _Packed 修飾子を使用します。 構造体の内容を変更する場合、受け渡す構造体はポインターとして構造体に渡す必要があります。
関数へのポインター PROCEDURE-POINTER 16 プロシージャーへのポインター (16 バイト)
サポートされません。 PIC S9(18) COMP-4 8 8 バイト整数
サポートされません。 PIC S9(18) BINARY 8 8 バイト整数

ILE C データ型と ILE CL との互換性について、次の表で説明します。

表 3. ILE C データ型と ILE CL との互換性
プロトタイプでの ILE C 宣言 CL 長さ コメント

char[n]
char *

*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® との互換性について、次の表で説明します。

表 4. ILE C データ型と OPM RPG/400 との互換性
プロトタイプでの ILE C 宣言 OPM RPG/400 I 仕様、DS サブフィールド列の仕様 長さ コメント

char[n]
char *

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 との互換性について、次の表で説明します。

表 5. ILE C データ型と OPM COBOL/400 との互換性
プロトタイプでの ILE C 宣言 OPM COBOL の LINKAGE SECTION 長さ コメント

char[n]
char *

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 4 バイトの符号付き整数。範囲は -999999999 から +999999999 まで。
long int PIC S9(9) COMP-4 4 4 バイトの符号付き整数。範囲は -999999999 から +999999999 まで。
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 構造体。この構造体には _Packed 修飾子を使用します。 構造体の内容を変更する場合、受け渡す構造体はポインターとして構造体に渡す必要があります。
関数へのポインター サポートされません。 16 16 バイトのポインター
サポートされません。 PIC S9(18) COMP-4 8 8 バイト整数

ILE C データ型と CL との互換性について、次の表で説明します。

表 6. ILE C データ型と CL との互換性
プロトタイプでの ILE C 宣言 CL 長さ コメント

char[n]
char *

*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 プログラムへ引数を渡す方法について、次の表で説明します。

表 7. コマンド行の 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 定数を渡す方法について、次の表で説明します。

表 8. コンパイル済みの制御言語プログラムから 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 への引数の受け渡しは、すべて参照によって行われます。

表 9. コンパイル済みの制御言語プログラムから ILE C プログラムへ渡される CL 変数
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 バイト) として受け渡されます。