COBOL call C function

本文介绍了一个具体的示例,展示了如何从COBOL程序中调用C语言函数,包括C函数定义、参数传递等内容。示例中包含了通过指针传递字符串、整数类型的数据以及空指针的使用。

Give a sample on how COBOL call C function.


Including:

1. C function definition

2. parameter passing, char * pointer, int, null pointer


1. Define C function (myfun.c)

void myfun(const unsigned char mapping[], unsigned char buffer[], unsigned int len)

{

     /* put your codes here*/

}


2. Compile C function into a shared library.

gcc -o myfun.so -shared -fpic myfun.c


3. COBOL caller codes


...

WORKING-STORAGE SECTION.

       01 PARAM1     PIC X(4) VALUES 'AAAA'.

       01 PARAM2     PIC X(4) VALUES 'BBBB'.

       01 PARAM3     PIC 9(4) COMP-5.

       ...

PROCEDURE DIVISION.


       MOVE 4 TO PARAM3.


       MOVE "ABCD" TO PARAM2.

       CALL 'myfun'  USING PARAM1

                                             PARAM2

                        BY VALUE PARAM3.


       MOVE "abcd" TO PARAM2.

       CALL 'myfun'  USING BY VALUE 0     *> pass null pointer

                         BY REFERENCE PARAM2

                         BY VALUE 4.


           STOP RUN.

           EXIT.

COBOL 编程语言中,去除字符串的前导空格和后缀空格可以通过多种方法实现。COBOL 本身并没有提供一个直接的 `TRIM` 函数,但可以通过内置的函数或逻辑来达到类似的效果。 ### 使用 `FUNCTION TRIM` 去除空格 COBOL 提供了 `FUNCTION TRIM` 来去除字符串末尾的空格。例如: ```cobol IDENTIFICATION DIVISION. PROGRAM-ID. TRIM-EXAMPLE. DATA DIVISION. WORKING-STORAGE SECTION. 01 INPUT-STRING PIC X(50) VALUE " Hello World ". 01 TRIMMED-STRING PIC X(50). PROCEDURE DIVISION. MOVE FUNCTION TRIM(INPUT-STRING) TO TRIMMED-STRING DISPLAY "TRIMMED STRING: " TRIMMED-STRING STOP RUN. ``` 上述代码中的 `FUNCTION TRIM` 会移除字符串末尾的空格,但不会处理字符串前面的空格[^5]。 ### 去除前导和后缀空格 为了去除字符串前导和后缀空格,可以结合 `FUNCTION TRIM` 和 `INSPECT` 语句。例如: ```cobol IDENTIFICATION DIVISION. PROGRAM-ID. TRIM-LEADING-TRAILING. DATA DIVISION. WORKING-STORAGE SECTION. 01 INPUT-STRING PIC X(50) VALUE " Hello World ". 01 TEMP-STRING PIC X(50). 01 TRIMMED-STRING PIC X(50). PROCEDURE DIVISION. MOVE INPUT-STRING TO TEMP-STRING INSPECT TEMP-STRING LEADING SPACE OMITTING SPACE INTO TRIMMED-STRING DISPLAY "TRIMMED STRING: " TRIMMED-STRING STOP RUN. ``` 上述代码中的 `INSPECT ... LEADING SPACE` 用于去除字符串前导的空格,而 `FUNCTION TRIM` 可以用于去除后缀空格。 ### 使用 `UNSTRING` 和 `STRING` 去除空格 另一种方法是通过 `UNSTRING` 和 `STRING` 组合来去除空格。这种方法通过分割字符串并重新组合来去除多余的空格。例如: ```cobol IDENTIFICATION DIVISION. PROGRAM-ID. REMOVE-SPACES. DATA DIVISION. WORKING-STORAGE SECTION. 01 INPUT-STRING PIC X(50) VALUE " Hello World ". 01 WORD PIC X(50). 01 OUTPUT-STRING PIC X(50) VALUE SPACES. PROCEDURE DIVISION. UNSTRING INPUT-STRING DELIMITED BY SPACE INTO WORD STRING WORD DELIMITED BY SIZE INTO OUTPUT-STRING DISPLAY "OUTPUT STRING: " OUTPUT-STRING STOP RUN. ``` 此方法通过 `UNSTRING` 分割字符串并忽略空格,然后通过 `STRING` 重新组合字符串[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值