COBOL2002 使用の手引 手引編
COBOLプログラムからCプログラムを呼ぶときの規則を示します。
Cプログラムのデータ型と,対応するCOBOLのデータ項目の型を,次に示します。
| Cプログラムのデータ型 | 対応するCOBOLのデータ項目の型 | ||
|---|---|---|---|
| unsigned char | -Bin1Byte指定あり | 符号なし2進項目(1〜2けた) | 9(1) COMP 〜 9(2) COMP |
| -Bin1Byte指定なし | 9(1) COMP-X 〜 9(2) COMP-X |
||
| − | 英数字項目(1けた) | X(1) |
|
| char | -Bin1Byte指定あり | 符号付き2進項目(1〜2けた) | S9(1) COMP 〜 S9(2) COMP※5 |
| − | 英数字項目(1けた) | X(1) |
|
| unsigned short | − | 符号なし2進項目(3〜4けた) | 9(3) COMP 〜 9(4) COMP 9(3) COMP-X 〜 9(4) COMP-X |
| short | − | 符号付き2進項目(3〜4けた) | S9(3) COMP 〜 S9(4) COMP |
| unsigned int | − | 符号なし2進項目(5〜9けた) | 9(5) COMP 〜 9(9) COMP 9(5) COMP-X 〜 9(9) COMP-X |
| int | − | 符号付き2進項目(5〜9けた) | S9(5) COMP 〜 S9(9) COMP |
| unsigned long | − | 符号なし2進項目(5〜9けた)※1 | 9(5) COMP 〜 9(9) COMP 9(5) COMP-X 〜 9(9) COMP-X |
| 符号なし2進項目(10〜18けた)※2 | 9(10) COMP 〜 9(18) COMP 9(10) COMP-X 〜 9(18) COMP-X |
||
| long | − | 符号付き2進項目(5〜9けた)※1 | S9(5) COMP 〜 S9(9) COMP |
| 符号付き2進項目(10〜18けた)※2 | S9(10) COMP 〜 S9(18) COMP |
||
| unsigned long long※4 | − | 符号なし2進項目(10〜18けた) | 9(10) COMP 〜 9(18) COMP 9(10) COMP-X 〜 9(18) COMP-X |
| long long※4 | − | 符号付き2進項目(10〜18けた) | S9(10) COMP 〜 S9(18) COMP |
| float | − | 単精度内部浮動小数点数字項目 | COMP-1 |
| double | − | 倍精度内部浮動小数点数字項目 | COMP-2 |
| ポインタ型 | − | アドレス名,アドレスデータ項目 | ADDRESS |
| 配列型 | − | アドレスデータ項目 | ADDRESS |
| 構造体※3 | − | 集団項目 | − |
COBOLプログラムからCプログラムへ引数を渡す方法を,次に示します。
:
WORKING-STORAGE SECTION.
01 CNT PIC S9(9) USAGE COMP.
01 STR.
02 STRCHAR PIC X(79).
02 FILLER PIC X VALUE LOW-VALUE.
:
PROCEDURE DIVISION.
:
CALL 'sample2' USING BY REFERENCE CNT STR.
: int sample2(int *cnt, char *str)
{
:
return(0);
} :
WORKING-STORAGE SECTION.
01 CNT PIC S9(9) USAGE COMP.
01 STR PIC X(1).
:
PROCEDURE DIVISION.
:
CALL 'sample2' USING BY VALUE CNT STR.
:int sample2(int cnt, char str)
{
:
return(0);
} IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE1.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WK-1.
02 W01 PIC X(30)
VALUE 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234'.
02 FILLER PIC X VALUE LOW-VALUE. …5.
PROCEDURE DIVISION.
CALL 'SAMPLE2'
USING BY REFERENCE WK-1. …1.
CALL 'SAMPLE3'
USING BY REFERENCE ADDRESS OF WK-1. …2.
CALL 'SAMPLE4'
USING BY CONTENT LENGTH OF WK-1. …3.
CALL 'SAMPLE5'
USING BY VALUE LENGTH OF WK-1. …4.
STOP RUN.
END PROGRAM SAMPLE1.#include <stdio.h>
int SAMPLE2(char *p_ptr_r)
{
printf("first char(r) =(%s)\n",p_ptr_r); … 1.
:
}
int SAMPLE3(char **p_ptr_ra)
{
printf("first char(ra)=(%s)\n",*p_ptr_ra); … 2.
:
}
int SAMPLE4(
int *p_ptr_cl /* この引数の型はUNIX32の場合 */
/* UNIX64の場合は long long * */
)
{
printf("length(p) =(%d)\n",*p_ptr_cl); … 3.
:
}
int SAMPLE5(
int p_ptr_vl /* この引数の型はUNIX32の場合 */
/* UNIX64の場合は long long */
)
{
printf("length(p) =(%d)\n",p_ptr_vl); … 4.
:
}first char(r) =(ABCDEFGHIJKLMNOPQRSTUVWXYZ1234)
:
first char(ra)=(ABCDEFGHIJKLMNOPQRSTUVWXYZ1234)
:
length(p) =(31)
:
length(p) =(31)
:CプログラムからCOBOLプログラムへ戻り値を返す方法を,次に示します。
WORKING-STORAGE SECTION.
01 RTC PIC S9(9) USAGE COMP.
:
PROCEDURE DIVISION.
:
CALL 'sample2' RETURNING RTC.int sample2()
{
int rtc;
:
return (rtc);
}構造体型のデータ項目をリターンする場合,COBOLプログラムとCプログラムでは境界調整によってデータのマッピング方法が異なることがあるので注意が必要です。
WORKING-STORAGE SECTION.
01 TBL.
02 A PIC S9(9) USAGE COMP.
02 B PIC X(10).
:
PROCEDURE DIVISION.
:
CALL 'sample2' RETURNING TBL.struct tbl {int a; char b[10];};
struct tbl sample2()
{
struct tbl rtn;
:
return (rtn);
}All Rights Reserved. Copyright (C) 2014, 2017, Hitachi, Ltd.