如何在GNU COBOL中获取C函数返回的64位整数值?
在GNU COBOL中直接处理返回64位整数的C函数调用
GNU COBOL默认将C函数返回值按32位BINARY-LONG处理,但无需编写C包装器,直接在COBOL代码内通过显式声明返回值类型就能解决问题,具体实现如下:
1. 显式指定返回值类型
在COBOL的CALL语句中,通过RETURNING子句明确指定返回值为BINARY-DOUBLE(对应C的64位整数类型,如int64_t或long long),覆盖默认的类型映射。示例代码:
IDENTIFICATION DIVISION. PROGRAM-ID. CALL-C-64BIT-FUNC. DATA DIVISION. WORKING-STORAGE SECTION. 01 RETURNED-VALUE PIC S9(18) BINARY-DOUBLE. *> 对应C的有符号64位整数 PROCEDURE DIVISION. CALL "my_c_64bit_function" RETURNING RETURNED-VALUE ON EXCEPTION DISPLAY "函数调用失败" NOT ON EXCEPTION DISPLAY "返回的64位整数: " RETURNED-VALUE END-CALL. STOP RUN.
若C函数返回无符号64位整数,只需将PIC S9(18)改为PIC 9(18),保持BINARY-DOUBLE类型不变。
2. 编译与验证注意事项
- 确保GNU COBOL编译器(
cobc)与C编译器均为64位版本,避免跨位数的类型不匹配问题。 - 测试边界值(如
INT64_MAX或INT64_MIN),验证返回值是否被正确接收,无截断或溢出。
内容的提问来源于stack exchange,提问作者ContronThePanda
相关产品推荐
相关产品推荐

