我试图了解如何(或者是否可以)按值将
long
传递给 C 函数。这是我的简单测试 C 函数:
#include <stdio.h>
long addone (long x) {
printf("c got %li\n", x);
fflush(stdout);
return 1+x;
}
这是我的 cobol 代码:
identification division.
program-id. ccalltest.
data division.
working-storage section.
01 my-val usage binary-long.
01 my-rc usage binary-long.
procedure division.
move 10 to my-val.
call 'addone' using
by content my-val
giving my-rc.
display my-val.
display my-rc.
stop run.
我用
编译cobc -x -free cobolcode.cob ccode.c -lc
实际发生的情况是,C 接收并打印了一个可疑的大数字(这实际上可能是一个指针,我不确定),而不是我期望的值 10。我在这里做错了什么吗?不支持用例?
这是程序输出的示例(非 10 数字在每次运行时都会发生变化):
c got 140725928122192
+0000000010
+1324668753
我正在使用 GnuCOBOL 3.1.2.0 和 GCC 14.2.1。
解决方案:
by value
正如评论者所指出的,解决方案是使用
by value
,而不是by content
。这实际上在 GnuCOBOL 程序员指南第 7.8.5 节(CALL 语句)中进行了解释。可以在此链接找到程序员指南:https://gnucobol.sourceforge.io/guides.html