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 |
− | 英数字項目(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けた) | 9(5) COMP 〜 9(9) COMP 9(5) COMP-X 〜 9(9) COMP-X |
long | − | 符号付き2進項目(5〜9けた) | S9(5) COMP 〜 S9(9) COMP |
unsigned _int64 | − | 符号なし2進項目(10〜18けた) | 9(10) COMP 〜 9(18) COMP 9(10) COMP-X 〜 9(18) COMP-X |
_int64 | − | 符号付き2進項目(10〜18けた) | S9(10) COMP 〜 S9(18) COMP |
float | − | 単精度内部浮動小数点数字項目 | COMP-1 |
double | − | 倍精度内部浮動小数点数字項目 | COMP-2 |
ポインタ型 | − | アドレス名,アドレスデータ項目 | ADDRESS |
配列型 | − | アドレスデータ項目 | ADDRESS |
構造体※ | − | 集団項目 | − |
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 /* この引数の型はPC(x86)の場合 */ /* PC(x64)の場合は _int64 * */ ) { printf("length(p) =(%d)\n",*p_ptr_cl); … 3. : } int SAMPLE5( int p_ptr_vl /* この引数の型はPC(x86)の場合 */ /* PC(x64)の場合は _int64 */ ) { 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) 2013, 2016, Hitachi, Ltd.
All Rights Reserved. Copyright (C) 2002, 2011, Microsoft Corporation.