如何按值传递long?

问题描述 投票:0回答:1

我试图了解如何(或者是否可以)按值将

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。

gnucobol
1个回答
0
投票

解决方案:

by value

正如评论者所指出的,解决方案是使用

by value
,而不是
by content
。这实际上在 GnuCOBOL 程序员指南第 7.8.5 节(CALL 语句)中进行了解释。可以在此链接找到程序员指南:https://gnucobol.sourceforge.io/guides.html

© www.soinside.com 2019 - 2024. All rights reserved.